在我的redux动作中,我有一个动作将被另外两个动作调用,代码如下:
export const addParticipantFromPopupRequest = (participant, project_id, currentStep) => async (dispatch) => {
const result = await addParticipant(participant)
dispatch({ type: PARTICIPANT_ADD, payload: result })
dispatch(updateProjectStep(project_id, currentStep))
}
export const handleFinalStep = (projectId, currentStep) => async (dispatch) => {
dispatch(updateProjectStep(projectId, currentStep))
}
const updateProjectStep = (projectId, currentStep) => async (dispatch, getState) => {
dispatch({ type: MODAL_STATUS_CHANGE, payload: { projectId, currentStep } })
dispatch({ type: PROJECT_PROCESS_LIST_UPDATE, payload: { project_id: projectId, currentStep } })
const { projectsProcessListsReducer } = getState()
localStorage.setItem("projectsProcessLists", JSON.stringify(projectsProcessListsReducer))
}
如果在调用updateProjectStep时不使用分派,则addParticipantFromPopupRequest和handleFinalStep无法正确运行。
我的问题是,我可以用这种方式调用调度动作吗?是否正确?为什么在其他操作而不是直接调用函数名称的情况下调用updateProjectStep时需要“调度”?
答案 0 :(得分:0)
我的问题是我可以用这种方式调用调度动作吗?
是的。您应该始终使用dispatch
进行呼叫。
为什么在其他操作而不是直接调用函数名称的情况下调用updateProjectStep时需要“调度”吗?
如果您在没有updateProjectStep
的情况下直接调用dispatch
,它将变成普通的js函数调用,而您的store
不会意识到。调度是触发store
中状态更改的唯一方法。
在
redux
中,store
是单一事实来源,您使用的dispatch
实际上来自store
({{1 }}。
如果您正常调用函数,则
store.dispatch
不会识别它。该操作不会通过store
知道的middlewares
(重击/传奇),也不会通过store
进行store
更新。
如果
reducers
未更新,则您的组件将不会收到任何更新。 最终,您的用户界面不会重新呈现。
您可以找到有关调度here的更多信息。