Redux -initialState是否需要是createSlice()中的一个对象?

js4nwp54  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(140)

下面的代码在调度时抛出错误:

// 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的功能搞错了?”

a9wyjsp7

a9wyjsp71#

之所以

const countSlice = createSlice({
    name: "count",
    initialState: 0,
    reducers: {
        add(state) {state += 1},
    },
});

不起作用,是因为你的add reducer实际上没有返回任何东西。如果状态是一个对象,这很好,因为对象是可变的。但是如果你的状态只是一个整数,那么你需要返回它来更新状态,因为整数是不可变的。

31moq8wy

31moq8wy2#

如果要将初始状态设置为值而不是对象,只需返回状态本身
const idSlice =创建切片({名称:“idSlice”,初始状态:“",异径管:{ setId(状态,动作){状态=动作.有效负载;返回状态;}、}、});
我做了这个,对我有用

相关问题