Dmi*_*vol 1 javascript reactjs redux
我使用createSlice()
从redux-starter-kit
. 由于immer
在引擎盖下,可以在减速器中改变状态。但是他们说在immer
. 例如,您不应该同时改变并从减速器返回新状态。所以我选择像第一次尝试一样变异
const testSlice = createSlice({
initialState: 4,
reducers:{
increment: state => {state = state + 1},
decrement: state => {state = state - 1}
}});
Run Code Online (Sandbox Code Playgroud)
但是这段代码不起作用。特别是,当我调度 increment() 或 decrement() 时,我在 Redux Dev Tools 中看到操作,但状态保持不变。好的。让我们像这样返回新状态:
第二次尝试
const testSlice = createSlice({
initialState: 4,
reducers:{
increment: state => state + 1,
decrement: state => state - 1
}});
Run Code Online (Sandbox Code Playgroud)
这段代码按预期工作。毕竟,我已经尝试过这种构造的
第三次尝试
const testSlice = createSlice({
initialState: {counter:4},
reducers:{
increment: state => {state.counter = state.counter + 1},
decrement: state => {state.counter = state.counter - 1}
}});
Run Code Online (Sandbox Code Playgroud)
这也有效问题是 - 为什么第三个有效而同时第一个无效?
小智 5
第一个示例不起作用的原因是因为您没有改变状态 - 您只是将作为参数获得的变量 重新分配state
给您的减速器。在第三次尝试中,您将状态用作对象。该对象通过引用作为参数传递给您的减速器,因此您可以修改其属性。这与 redux 无关,它是 Javascript 的工作方式。
归档时间: |
|
查看次数: |
473 次 |
最近记录: |