Redux 动作创建者在另一个内部调用一个

Redux action creators invoke one inside another

我在 Redux 中使用 ducks,但这应该与问题无关。我在同一个文件中有几个动作创建者,我想从另一个中调用一个(希望不必为下面的 SWITCH 中的每个 CASE 重复分派):

...
export function closeAuthDialogs() {
  return {type: CLOSE_AUTH_DIALOGS}
}

export function openDialog(dialog) {
  // close any open dialogs
  dispatch => {dispatch(closeAuthDialogs())} // <--THIS DOES NOT GET CALLED!!!
  //open the one we need
  switch (dialog) {
    case 'login':
      return {type: OPEN_LOGIN}
    case 'register':
      return {type: OPEN_REGISTER}
    case 'forgot':
      return {type: OPEN_FORGOT}
    case 'change':
      return {type: OPEN_CHANGE}
    case 'profile':
      return {type: OPEN_PROFILE}
    default:
      return;
  }
}
...

打开工作正常,但关闭功能永远不会被触发。有没有一种方法可以从打开函数中调用关闭函数,而无需为打开函数的 SWITCH 中的每个 CASE 进行双重调度?

我所说的双重调度是指...

return dispatch => {
  dispatch({type: CLOSE_AUTH_DIALOGS})
  dispatch({type: OPEN_SOME_DIALOG)}
}

如果可能,我只想调用一次关闭,然后 return 指定的打开。

TIA!

您需要使用像 redux-thunk. Installation instructions here 这样的中间件,但基本上您需要在设置商店时应用它:

const store = createStore(
  rootReducer,
  applyMiddleware(thunk)
);

这将允许您 return 一个动作的功能。应该这样做:

export function openDialog(dialog) {
  return (dispatch) => {
    dispatch(closeAuthDialogs());
    switch (dialog) {
      case 'login':
        return dispatch({type: OPEN_LOGIN})
      case 'register':
        return dispatch({type: OPEN_REGISTER})
      case 'forgot':
        return dispatch({type: OPEN_FORGOT})
      case 'change':
        return dispatch({type: OPEN_CHANGE})
      case 'profile':
        return dispatch({type: OPEN_PROFILE})
      default:
        return;
    }
  }
}