下面的代码在调度时抛出错误:
// countSlice.js
const countSlice = createSlice({
name: "count",
initialState: 0,
reducers: {
add(state) {state += 1},
},
});
但是,如果我将initialState
更改为一个对象,代码就可以正常工作:
// countSlice.js
const countSlice = createSlice({
name: "count",
initialState: {value: 0}, // now it works!
reducers: {
add(state) {state.value += 1},
},
});
如果我将initialState
保留为数字,但将reducer编写为数组函数,则代码也可以工作:
// countSlice.js
const countSlice = createSlice({
name: "count",
initialState: 0,
reducers: {
add: state => state + 1, // also works!
},
});
“我刚刚学习Redux,就被这个搞糊涂了,这和Immer有关系吗?我是不是把Redux的功能搞错了?”
2条答案
按热度按时间a9wyjsp71#
之所以
不起作用,是因为你的add reducer实际上没有返回任何东西。如果状态是一个对象,这很好,因为对象是可变的。但是如果你的状态只是一个整数,那么你需要返回它来更新状态,因为整数是不可变的。
31moq8wy2#
如果要将初始状态设置为值而不是对象,只需返回状态本身
const idSlice =创建切片({名称:“idSlice”,初始状态:“",异径管:{ setId(状态,动作){状态=动作.有效负载;返回状态;}、}、});
我做了这个,对我有用