如何强制执行redux操作只调度一次?

时间:2017-03-03 12:34:03

标签: javascript redux

我想知道如何标记redux动作不是第二次发送。

let triggerOnce = false;

export function populateStore() {
  return (dispatch) => {
    if (triggerOnce) return;

    dispatch({
      type: ReviewActions.UPDATE_REVIEW_STATE,
      data: review,
    });

    triggerOnce = true;
  };
}

正如你现在所看到的,我正在使用一个外部变量来标记...这不是那么好。想知道是否有更好的方法。非常感谢任何建议

2 个答案:

答案 0 :(得分:1)

我不完全确定你的情况,所以如果我弄错了,我会道歉。我会尝试找到一种方法来只调用一次动作,而不是在全局范围内设置一个标志。如果这不合适,您可以在reducer中设置一个标记,一旦填充就设置为true

const initialState = {
   hasBeenSet: false,
   ...restOfState,
}

const events = {
  [UPDATE_REVIEW_STATE]: (state) => {
     const { hasBeenSet } = state;

     return hasBeenSet ? state : { ...state, hasBeenSet: true };
  },
};

我希望有所帮助!

答案 1 :(得分:0)

我使用了lodash once()否则你可以使用flag实现一个闭包。

https://lodash.com/docs/4.17.4#once