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;
}
}
}
我在 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;
}
}
}