我不知道。为什么我甚至在我的对象上添加了我的推送函数来返回我的新结果,应用程序在我的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.
谢谢您
1条答案
按热度按时间waxmsbnn1#
根据错误消息:Immer允许你用两种方式更新状态,一种是“改变”现有的
state
,另一种是 * 返回 * 一个新值,但是,你一次只能做其中的一种。你试图同时做这两件事,你有
return {...state}
,但你也有pushProduct()
,听起来像是在变异。这里最好的答案是 * 根本不 * 尝试做
return {...state}
,而 * 只是 *“变异”现有的state
。有关https://redux-toolkit.js.org/usage/immer-reducers#mutating-and-returning-state详细信息,请访问www.example.com。