我在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;
}
}
...
打开工作正常,但关闭函数永远不会被触发。有没有办法在open函数中调用close函数而不对open函数的SWITCH中的每个CASE进行双重调度?
通过双重调度我的意思是......
return dispatch => {
dispatch({type: CLOSE_AUTH_DIALOGS})
dispatch({type: OPEN_SOME_DIALOG)}
}
如果可能的话,我只想调用一次关闭,然后返回指定的open。
TIA!
答案 0 :(得分:3)
您需要使用redux-thunk之类的中间件。安装说明here但基本上您需要在设置商店时应用它:
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;
}
}
}