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 个键几乎指向同一个对象?它是否使减速器不纯并且整体代码功能不正确?

4

1 回答 1

0

您可以根据需要添加任意数量的键,reducer 修改状态是很常见的。

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

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

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

于 2018-12-12T10:11:29.283 回答