Redux动作分派

时间:2020-07-14 04:01:34

标签: reactjs redux react-redux redux-actions

在我的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时需要“调度”?

1 个答案:

答案 0 :(得分:0)

我的问题是我可以用这种方式调用调度动作吗?

是的。您应该始终使用dispatch进行呼叫。

为什么在其他操作而不是直接调用函数名称的情况下调用updateProjectStep时需要“调度”吗?

如果您在没有updateProjectStep的情况下直接调用dispatch,它将变成普通的js函数调用,而您的store不会意识到。调度是触发store中状态更改的唯一方法。

redux中,store单一事实来源,您使用的dispatch实际上来自store({{1 }}。

如果您正常调用函数,则store.dispatch不会识别它。该操作不会通过store知道的middlewares(重击/传奇),也不会通过store进行store更新。

如果reducers未更新,则您的组件将不会收到任何更新。 最终,您的用户界面不会重新呈现。

您可以找到有关调度here的更多信息。