我有一个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个键几乎指向同一对象?会导致减速器不纯净,导致整体代码无法正常工作?
答案 0 :(得分:0)
您可以根据需要添加任意数量的键,而reducer修改状态非常普遍。
最好先执行“ someOperation”计算,然后再采取行动使其变得更整洁。只要您不进行突变,就不需要创建副本,因此可以删除deepCopy。一切正常,只要正确连接对象即可。
如果要添加多个过滤器,则可以为每个过滤器添加一个减速器和动作,然后将它们与选择器交叉使用:https://github.com/reduxjs/reselect。
PS:最好遵循最佳实践使用const。