4

我应该如何在 redux 中实现以下逻辑:有 2 个操作:同步和异步。假设它的 validate() 和 save()。当用户单击执行的按钮时validate(),它会更改状态存储中的一些isValid变量。然后如果isValid执行了保存操作。

4

2 回答 2

5

有很多方法可以做你想做的事。但是,作为一般规则,不要在 Redux 中存储任何可以派生的东西。isValid可以通过在您的字段上运行验证来派生。此外,我不认为像表单字段值这样正在变化的中间状态属于 Redux。我会将它们存储在 React 状态,直到它们被认为有效并提交。

顺便说一句,正如 Spooner 在评论中提到的那样,您可以在 thunk 中调用同步操作。或者您可以在 thunk 中访问状态。

选项1

// Action Creator
export default function doSomething(isValid) {
    return (dispatch) => {

        dispatch(setValid(isValid));

        if (isValid) {
            return fetch() //... dispatch on success or failure
        }
    };
}

选项#2

// Component
dispatch(setValid(isValid));
dispatch(doSomething());

// Action Creator
export default function doSomething() {
    return (dispatch, getState) => {

        const isValid = getState().isValid;

        if (isValid) {
            return fetch() //... dispatch on success or failure
        }
    };
}
于 2016-04-24T17:10:38.913 回答
3

您可以在“点击处理程序”中“包装”这些功能。

//call it on button click

handleClick = () => {
  if (validate()) {
    //call save function
    save()
  }
}

validate = () => {
  //do something
  //check validness and then
  if (valid) return true 
}
于 2016-04-24T14:47:59.970 回答