未捕获类型错误:typeOrActionCreator 未定义

问题描述 投票:0回答:1

我收到第二个构建器的错误,它显示:

Uncaught TypeError: typeOrActionCreator is undefined.
我不知道该构建器出了什么问题。当我删除该构建器时,它会出现有关下一个构建器的错误。 (请注意,我从最后一个构建器中调度了 thunkFunction)

export const updateSelectedOrNewMovementData = ("myMovements/updateSelectedOrNewMovementData", async(allData) => {
    const {data, type, motion_id} = allData
    try{
        const {receivedData} = await patchRequest(`/coach/motion/${motion_id}`, data)
        return type
    }
    catch (err) {
        console.error("err", err.response.data.message);
    }
})

...here there are codes for my slice.

extraReducers(builder) {
        builder
            .addCase(handleGetMyMovements.fulfilled, (state, action) => {
                const data = action.payload;
                if (data?.length > 0) {
                    state.myMovements = [...state.myMovements, ...data];
                    state.myMovementsTemp = [...state.myMovements, ...data];
                }
                if (data?.length >= 20) {
                    state.status.isNotMoreData = true;
                } else {
                    state.status.isNotMoreData = false;
                }
                state.status.myMovementsLoading = false;
            })
            .addCase(handleGetMyMovements.pending, (state, action) => {
                state.status.myMovementsLoading = true;
            });
        builder
            .addCase(updateSelectedOrNewMovementData.fulfilled, (state, action) => {
                if (action?.payload === "formData") {
                    state.status.selectedOrNewMovementLoading = "sentData"
                    setTimeout(() => {
                        state.status.selectedOrNewMovementLoading = false
                        window.history.back();
                    }, 3000);
                }
            })
            .addCase(updateSelectedOrNewMovementData.pending, (state, action) => {
                if (action?.payload === "formData") {
                    state.status.selectedOrNewMovementLoading = true
                }
            })
            .addCase(updateSelectedOrNewMovementData.rejected, (state, action) => {
                state.status.selectedOrNewMovementLoading = "error"
            });
        builder
            .addCase(createNewMovement.fulfilled, (state, action) => {
                const payload = action?.payload
                const dispatch = payload?.dispatch
                state.status.selectedOrNewMovementLoading = false
                if (payload?.data?.is_successful) {
                    state.motionId = payload?.data?.motion_id
                    dispatch(updateSelectedOrNewMovement({
                        data: payload?.myForm,
                        type: "formData",
                        motion_id: payload?.data?.motion_id
                    }))
                    dispatch(updateSelectedOrNewMovement({
                        data: payload?.textFormBody,
                        type: "rawData",
                        motion_id: payload?.data?.motion_id
                    }))
                }
            })
            .addCase(createNewMovement.pending, (state, action) => {
                state.status.selectedOrNewMovementLoading = true
            })
            .addCase(createNewMovement.rejected, (state, action) => {
                state.status.selectedOrNewMovementLoading = "error"
            })
    },
reactjs redux-toolkit redux-thunk
1个回答
0
投票

在 Redux 中,永远不允许从减速器内部调度。对于异步逻辑也是如此,例如执行

setTimeout

Reducer 逻辑必须是纯同步函数,没有副作用。

您可能想要在 thunk 中或使用侦听器中间件执行当前正在执行的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.