Redux Reducer是否可以将2个键设置为几乎是另一个键的副本的状态

时间:2018-12-12 08:52:42

标签: javascript redux deep-copy pure-function

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

Reducer是否可以返回修改后的状态-2个键几乎指向同一对象?会导致减速器不纯净,导致整体代码无法正常工作?

1 个答案:

答案 0 :(得分:0)

您可以根据需要添加任意数量的键,而reducer修改状态非常普遍。

最好先执行“ someOperation”计算,然后再采取行动使其变得更整洁。只要您不进行突变,就不需要创建副本,因此可以删除deepCopy。一切正常,只要正确连接对象即可。

如果要添加多个过滤器,则可以为每个过滤器添加一个减速器和动作,然后将它们与选择器交叉使用:https://github.com/reduxjs/reselect

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