代码之家  ›  专栏  ›  技术社区  ›  Probosckie

一个redux reducer能否在状态中设置两个键,而这两个键几乎是另一个键的副本

  •  0
  • Probosckie  · 技术社区  · 7 年前

    我有一个redux reducer,如下所示:

    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中的一些深层引用也将指向内存中的同一个对象。

    还原器是否可以返回一个修改过的状态-其中两个键几乎指向同一个对象?它是否会使减速机不纯净,使整个代码无法正常工作??

    1 回复  |  直到 7 年前
        1
  •  0
  •   Psartek    7 年前

    您可以添加任意多个键,而且还原器修改状态是非常常见的。

    最好在发送到操作之前进行“someOperation”计算,以使其更干净。只要不发生变异,就不需要创建副本,因此可以删除deepCopy。其他一切都正常,因为您正确地连接了对象。

    如果要添加多个筛选器,可以为每个筛选器添加一个reducer和action,并将它们与选择器交叉: https://github.com/reduxjs/reselect .

    注意:最好按照最佳实践使用const。

    推荐文章