Redux 伊默为什么抱怨计算属性?

Redux 伊默为什么抱怨计算属性?,redux,immer.js,Redux,Immer.js,根据最近的一个答案,我开始使用ReduxStarterKit,它在切片函数中使用Immer。总的来说,我认为这个基本想法很好 不幸的是,当我试图真正利用immer使我的生活更轻松时,我遇到了一些问题。我已经试着用我的测试缩减器来简化我正在做的事情,但我仍然遇到同样的基本问题。我还关闭了所有中间件(ElectronRedux),以确保它不会出现问题。以下是我用于测试的简化测试: const CounterSlice = createSlice({ name: 'counter', redu

根据最近的一个答案,我开始使用ReduxStarterKit,它在切片函数中使用Immer。总的来说,我认为这个基本想法很好

不幸的是,当我试图真正利用immer使我的生活更轻松时,我遇到了一些问题。我已经试着用我的测试缩减器来简化我正在做的事情,但我仍然遇到同样的基本问题。我还关闭了所有中间件(ElectronRedux),以确保它不会出现问题。以下是我用于测试的简化测试:

const CounterSlice = createSlice({
  name: 'counter',
  reducers: {
    increment: (state)=>{state.value = state.value + 1},
    decrement: (state)=>{state.value = state.value - 1}
  },
  initialState: { value: 0 },
})
上面的代码非常简单,就我所知,Immer/ReduxStarterKit希望我写什么。尽管如此,当我调用代码时,我得到一个错误:
Uncaught error:Immer drafts不能有计算属性

我做错了什么

编辑:

我只是组装了一个简单的演示应用程序,只是为了测试基础知识。这里编码的计数器片工作得非常好。我猜这是Immer和另一个软件包之间的交互——只是不确定在哪里调试哪个软件包。这是一个redux版本的问题,是electron,electron redux,typescript,webpack,这个列表还在继续(痛苦地)继续


我可能不得不重新创建我的基本应用程序环境,并一次测试这一痛苦的步骤。啊

原来问题不在我共享的代码中,而是在我设置初始状态时出现的。Electron正在处理我通过getState()来回发送的数据,添加getter和setter方法。那些getter和setter方法(非常正确)触发了这个错误

const initialState = remote.getGlobal('state');
console.log("initial state: ", initialState);
const store = CreateStore({initialState:{...initialState}, main: false})
预期日志输出:
{counter:{value:1}…rest}
,但实际输出是
{counter:{value:1,getValue:function(),setValue:function()},getCounter:function(),setCounter:function(),…rest

呜呜。现在我只需要“清理”我的状态,因为显然状态存储以某种方式持续了这个失败。然后找出如何剥离(嵌套的!)getter/setter。啊

编辑:我只需要使用electron redux中内置的
getInitialStateRenderer
,而不是剥离getter/setter

const initialState=getInitiateStatender()

const store=CreateStore({initialState:initialState,main:false})

嗯。一些谷歌搜索出现了,并显示了相同的错误消息,但没有明确的答案。我以前没有看到过这个错误-我会尽快进行调查。我怀疑这可能是由于表达式两侧都使用了
state.value
。如果执行
state.value++
const{value},会发生什么情况=state;state.value=value+1
?@markerikson与
state.value++
的问题完全相同,如果
state.value=value+1
起作用,我会给你回复。仅供参考,我看不出后者是如何引起问题的——state.value毕竟只是一个数字。伊默可能在做一些代理魔法,但如果他们做不到的话解决这么简单的问题,他们就不会工作得很好@markerikson做了更多的实验后,我没有在我的应用程序中进行“简单”测试,而是用一个干净的测试应用程序进行了一个简单的测试。看起来我实际上是在看应用程序中的一些其他软件包和immer之间的交互——我不知道是哪一个。我将不得不从头开始,不断积累,直到我能够完成确定它,然后向相关回购协议寻求帮助。@markerikson感谢你给我的帮助,但我认为这个项目是可恶的。我只是花了(太多了)经过一段时间的试验,最终我有效地将整个应用程序复制到了测试应用程序中。测试应用程序——代码完全相同——工作正常,而开发应用程序却没有。显然,发生了一些非常奇怪的事情。