错误:IMMER生产者返回了一个新值*并*修改了它的草稿。返回新值*或*修改草稿 [英] Error: An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft
本文介绍了错误:IMMER生产者返回了一个新值*并*修改了它的草稿。返回新值*或*修改草稿的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有减速机
const userAuthSlice = createSlice({
name: "userAuth",
initialState: {
token: '',
},
reducers: {
setToken: (state, action) => state.token = action.payload.test,
},
});
我有我的派单命令
<button
value={text.sign_in.submit}
onClick={() => dispatch(userAuthSlice.actions.setToken({test:"test"}))}
/>
当我按下按钮时,我得到的是此错误:
我已隔离所有内容,以确保这就是问题所在,而不是其他问题。
为什么弹出此错误?
推荐答案
问题是使用不带大括号的箭头函数作为减法器,因为它充当隐式的Return语句。因此,您同时变异了state.token
、和以返回赋值结果。
根据the Immer docs on returning data,有几种方法可以解决此问题:
- 在赋值前面添加
void
运算符 - 用大括号将赋值括起来,使其成为函数体
SOsetToken
减速器可以使用void
更新为
setToken: (state, action) => void(state.token = action.payload.test)
这篇关于错误:IMMER生产者返回了一个新值*并*修改了它的草稿。返回新值*或*修改草稿的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文