首页 文章

redux reducer 可以在状态下设置 2 个键,几乎是另一个的副本

提问于
浏览
0

我有一个 redux 减速机如下:

function x(state = null, action){
   switch(action){
      case 'FILTER_DATA': {
        let { data } = state;
        let newData = someOperation(data);
        let s1 = deepCopy(newData);
        let s2 = s1.filter((v,i) => i%2);
        return {
          ...state,
          v1: s1,
          v2: s2
        };
     }
   }
}

如果 s1 是嵌套对象的数组 - 那么 s2 中的一些深度引用也将指向内存中的同一对象。

减速器是否可以返回修改后的状态 - 其中 2 个键几乎指向同一个对象?它是否会使减速器不纯净并且整个代码功能不正确?

1 回答

  • 0

    您可以根据需要添加任意数量的键,并且减速器通常可以修改状态。

    最好在发送行动之前进行'someOperation'计算以使其更清洁。只要不变异,就不需要创建副本,因此可以删除 deepCopy。当你正确地连接对象时,其他一切都没问题。

    如果要添加多个过滤器,可以为每个过滤器添加一个 reducer 和 action,并使用选择器交叉:https://github.com/reduxjs/reselect

    PS:最好使用 const 遵循最佳实践。

相关问题