错误:IMMER生产者返回了一个新值*并*修改了它的草稿。返回新值*或*修改草稿 [英] Error: An immer producer returned a new value *and* modified its draft. Either return a new value *or* modify the draft

查看:15
本文介绍了错误: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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆