【问题标题】:Immer - An immer producer returned a new value *and* modified react nativeImmer - 一个 immer 生产者返回了一个新值 *并且 * 修改了 react native
【发布时间】:2021-09-06 20:15:22
【问题描述】:
    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 生产者返回了一个新值修改了 react native

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

【问题讨论】:

    标签: reactjs redux redux-toolkit


    【解决方案1】:

    您正在修改 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 好好读一读。

    【讨论】:

      猜你喜欢
      • 2021-07-17
      • 2020-07-03
      • 2020-11-21
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多