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 它来实际更新状态,因为整数是不可变的。