我想将简单的JS对象保留在redux状态(来自某个请求的非常大的响应)。我有以下减速机:
function reducer(state = new Map(), action) {
switch (action.type) {
case SOME_ACTION:
return state.merge({
request: action.request
});
default:
return state;
}
};
问题是action.request
是一个非常大的递归树,并且合并操作非常慢。此外,它不是普通的JS,但它会转换为不可变的。我注意到简单地返回新的Map
要快得多:
function reducer(state = new Map(), action) {
switch (action.type) {
case SOME_ACTION:
return new Map({
request: action.request
});
default:
return state;
}
};
这里的状态包含普通的JS请求字段,速度很快,但是 - 这是一个好方法吗?在redux连接内部的浅层比较仍然可以工作吗?
答案 0 :(得分:0)
新关键字将始终在内存中创建新对象。让我们试试,以前的状态可以保留如下: -
function reducer(state = new Map(), action) {
switch (action.type) {
case SOME_ACTION:
let mergeStates = {...state,[action.stateIdentificationKey]:action.request}
return state.merge(mergeStates);
default:
return state;
}
};
stateIdentificationKey
用于标识合并状态。每个州都必须发送一个密钥进行识别。
您也可以尝试: -
function reducer(state = new Map(), action) {
switch (action.type) {
case SOME_ACTION:
return new Map({
...state,
request: action.request
});
default:
return state;
}
};