Immer - 一个 immer producer 返回了一个新的值*并*修改了 react native

Immer - An immer producer returned a new value *and* modified react native

    toggleAllClassList: (state, action) => {
        let allClassListLocal = state.classList || [];

        var isAllSelected = false;
        allClassListLocal.forEach(function (item: any) {
            item.LstParentInfo.forEach((subItem: any) => {
                subItem.IsSelected = !subItem.IsSelected;
                isAllSelected = subItem.IsSelected;
            });
        });


        return {
            ...state,
            classList: [...allClassListLocal],
            isClassListSelected: isAllSelected,
            isAllSelected: isAllSelected,
        };
    }

我收到这个错误

[Immer] 一个 immer producer 返回了一个新值 and modified react native

我正在使用 redux 工具包并收到此错误。关于为什么会这样的任何指示?

您正在修改 forEach 中的状态,并且您还返回了一个新状态。您可以同时执行这两项操作,但不能同时执行这两项操作。

解决方案看起来像



    toggleAllClassList: (state, action) => {
        var isAllSelected = false;
        if (state.classList) {
          state.classList.forEach(function (item: any) {
              item.LstParentInfo.forEach((subItem: any) => {
                  subItem.IsSelected = !subItem.IsSelected;
                  isAllSelected = subItem.IsSelected;
              });
          });
        }

        state.isClassListSelected = isAllSelected
        state.isAllSelected = isAllSelected
    }

一般来说,给https://redux-toolkit.js.org/usage/immer-reducers一个好的阅读。