Redux - initialState 是否需要成为 createSlice() 中的对象?
Redux - Does initialState need to be an object in createSlice()?
以下代码在我发送时抛出错误:
// 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有关系吗? reducer函数是我搞错了吗?
原因
const countSlice = createSlice({
name: "count",
initialState: 0,
reducers: {
add(state) {state += 1},
},
});
不起作用,是因为您的 add reducer 实际上没有 returning 任何东西。如果状态是一个对象,这很好,因为对象是可变的。但是如果你的状态只是一个整数,那么你需要 return 它来实际更新状态,因为整数是不可变的。
以下代码在我发送时抛出错误:
// 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有关系吗? reducer函数是我搞错了吗?
原因
const countSlice = createSlice({
name: "count",
initialState: 0,
reducers: {
add(state) {state += 1},
},
});
不起作用,是因为您的 add reducer 实际上没有 returning 任何东西。如果状态是一个对象,这很好,因为对象是可变的。但是如果你的状态只是一个整数,那么你需要 return 它来实际更新状态,因为整数是不可变的。