Uri*_*iil 3 javascript reactjs redux
从Redux文档中我知道,我们永远不应该改变状态,这就是我们应该使用concat和slice方法的原因,所以我最终使用了reducer(为简化而删除了大部分操作):
export default function blocks(state = [], action) {
switch (action.type) {
case DELETE_BLOCK:
var index = state.findIndex(e => e.id === action.blockId);
return [...state.slice(0, index), ...state.slice(index + 1)];
default:
return state;
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我没有要删除的元素的索引,所以我可以使用filter吗?像这样:
export default function blocks(state = [], action) {
switch (action.type) {
case DELETE_BLOCK:
return state.filter(e => e.id !== action.blockId);
default:
return state;
}
Run Code Online (Sandbox Code Playgroud)
filter不改变状态,它返回一个新的,Array所以这里没有错.
我们试图避免filter在处理immutable数据时,因为它总是返回一个新的引用,打破引用相等性检查===.但是如果你没有使用这种参考,如果你认为状态没有改变就试图返回先前的状态引用(我认为你没有这样做,没关系),你不需要担心关于使用filter.
| 归档时间: |
|
| 查看次数: |
958 次 |
| 最近记录: |