为什么我的Redux应用程序返回[ Immer ]错误?

azpvetkf  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(252)

我不知道。为什么我甚至在我的对象上添加了我的推送函数来返回我的新结果,应用程序在我的console.log上打印错误。

切片.js

import { createSlice } from '@reduxjs/toolkit';
import { pushProduct } from '../commons/push';

export const slice = createSlice({
    name: 'initial',
    
    initialState : {
        product: [],
    },
    
    reducers: {
        ADDS(state, actions) {
            return {
                ...state, 
                product: pushProduct(state.product, actions.payload),
                console1: console.log('State: ', state.product),
                console2: console.log('Actions: ', actions.payload),
            } 
        }
    }
});

export const { ADDS } = slice.actions;

export default slice.reducer;

推送.js

// Push new prpduct to the cart
export const pushProduct = (initial, productSelect) => { return initial.push(productSelect) };

控制台日志错误

errors.ts:49 Uncaught Error: [Immer] An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft.

谢谢您

waxmsbnn

waxmsbnn1#

根据错误消息:Immer允许你用两种方式更新状态,一种是“改变”现有的state,另一种是 * 返回 * 一个新值,但是,你一次只能做其中的一种。
你试图同时做这两件事,你有return {...state},但你也有pushProduct(),听起来像是在变异。
这里最好的答案是 * 根本不 * 尝试做return {...state},而 * 只是 *“变异”现有的state
有关https://redux-toolkit.js.org/usage/immer-reducers#mutating-and-returning-state详细信息,请访问www.example.com。

相关问题