1

我在 Redux 中使用鸭子,但这应该与问题无关。我在同一个文件中有几个动作创建者,我想从另一个中调用一个(希望不必为下面的 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;
  }
}
...

打开工作正常,但关闭功能永远不会被触发。有没有办法从 open 函数中调用 close 函数,而不需要对 open 函数的 SWITCH 中的每个 CASE 进行双重调度?

通过双重调度,我的意思是......

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

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

蒂亚!

4

1 回答 1

3

您需要使用像redux-thunk这样的中间件。此处安装说明,但基本上您需要在设置商店时应用它:

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

这将允许您从操作中返回一个函数。这样的事情应该这样做:

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;
    }
  }
}
于 2016-03-11T08:41:17.397 回答