为什么 immer 抱怨计算属性?

Why is immer complaining about computed properties?

因此,根据最近的回答,我开始使用 ReduxStarterKit,它在切片功能中使用了 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 cannot have computed properties

我做错了什么?

编辑:

我只是整理了一个简单的演示应用程序,只是为了测试基础知识。此处编码的计数器切片运行良好。我想这是 Immer 和另一个包之间的交互——只是不确定去哪里调试 one。是不是 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

糟糕。现在我只需要 'clean' 我的状态,因为显然状态存储以某种方式持续了这个失败。然后弄清楚如何剥离(嵌套!)getters/setters。呃.

编辑:我不需要剥离 getters / setters,我只需要使用 electron-redux 的内置 getInitialStateRenderer。所以把上面的代码改成:

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