Redux 切片';减速器内部的s状态自参考

Redux 切片';减速器内部的s状态自参考,redux,immer.js,redux-toolkit,Redux,Immer.js,Redux Toolkit,在使用redux的工具箱更新切片减速器中的状态时,我遇到了循环引用的问题,例如: const aSlice = createSlice({ ... extraReducers: builder => { ..., builder.addCase(addToState.fulfilled, (state, action) => { state.data = { ...state.data, ...actio

在使用redux的工具箱更新切片减速器中的状态时,我遇到了循环引用的问题,例如:

const aSlice = createSlice({
...
extraReducers: builder => {
    ...,
    builder.addCase(addToState.fulfilled, (state, action) => {
        state.data = {
            ...state.data,
            ...action.payload.data
        };
    });
    ...,
  }

});
从而导致
…state.data
返回一个代理引用,而不是前面提到的陷阱之一的值,以及


我可以想出一些方法来解决这个问题,但是,我想知道它们是否是解决这个问题的最佳实践,或者是实现这个问题的优雅方法?

当使用Immer和代理时,“全部分配”的一个有用模式是实际使用
Object.assign()

通常,将
Object.assign()
与Redux一起使用会将空对象作为第一个参数传递,使其成为不可变的更新,如
Object.assign({},oldItem,newItem)

但是,使用Immer,您可以执行真正的变异更新,将所有传入属性指定给现有对象。在本例中,
Object.assign(state.data、action.payload.data)