1

在我的 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 而不是直接调用函数名时需要“调度”?

4

1 回答 1

1

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

是的。您应该始终使用dispatch.

为什么我在另一个动作中调用 updateProjectStep 而不是直接调用函数名时需要“调度”?

如果updateProjectStep不带 直接调用dispatch,就会变成普通的js函数调用,你store不会察觉。Dispatch 是触发store.

在is single source of truthredux中,您使用的实际上是来自( )。storedispatchstorestore.dispatch

如果你正常调用一个函数,那么它不会被store. 该操作不会通过middlewares(thunk/saga)store知道并且不会store通过reducers.

如果store未更新,您的组件将不会收到任何更新。最终你的 UI 不会重新渲染。

您可以在此处找到有关调度的更多信息。

于 2020-07-14T04:32:07.383 回答