我有一个 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 回答
您可以根据需要添加任意数量的键,并且减速器通常可以修改状态。
最好在发送行动之前进行'someOperation'计算以使其更清洁。只要不变异,就不需要创建副本,因此可以删除 deepCopy。当你正确地连接对象时,其他一切都没问题。
如果要添加多个过滤器,可以为每个过滤器添加一个 reducer 和 action,并使用选择器交叉:https://github.com/reduxjs/reselect。
PS:最好使用 const 遵循最佳实践。