因此,根据最近的回答,我开始使用ReduxStarterKit,该工具的切片函数中使用了Immer。总的来说,我认为基本思路很棒。
不幸的是,当我尝试真正地使自己沉浸于生活中时,我遇到了很多问题。我已经尝试简化使用我的Test Reducer所做的事情,但我仍然遇到相同的基本问题。我还关闭了所有中间件(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与另一个软件包之间的相互作用-只是不确定要调试哪个一个。是redux版本的问题,是电子,电子redux,打字稿,webpack,列表不停地(痛苦地)开着。
我可能不得不重新创建我的基本应用程序环境并一次测试这一痛苦的步骤。 gh!
答案 0 :(得分:1)
原来问题不在我共享的代码中,而是在我设置初始状态时出现了问题。 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
。
糟糕。现在,我只需要“清理”我的状态,因为显然状态存储以某种方式持续了这种故障。然后弄清楚如何剥离(嵌套!)吸气剂/吸气剂。 gh。