在redux删除操作中切片与过滤器

Uri*_*iil 3 javascript reactjs redux

Redux文档中我知道,我们永远不应该改变状态,这就是我们应该使用concatslice方法的原因,所以我最终使用了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)

Pie*_*scy 7

filter不改变状态,它返回一个新的,Array所以这里没有错.

我们试图避免filter在处理immutable数据时,因为它总是返回一个新的引用,打破引用相等性检查===.但是如果你没有使用这种参考,如果你认为状态没有改变就试图返回先前的状态引用(我认为你没有这样做,没关系),你不需要担心关于使用filter.