如何删除redux存储数组中的最后一个元素?

时间:2018-09-20 22:07:34

标签: reactjs redux

我有以下代码:

const initialState = {
  searchItems: ['Item'],
}
export default (state = initialState, action) => {
  switch (action.type) {
    case BACKSPACE_REMOVE_SEARCH_ITEM:
      console.log(state.searchItems);
      return {
        ...state,
        searchItems: [...state.searchItems.splice(-1)],
      };
    default:
      return state;
  }
}

但是当我尝试执行这样的操作时,我收到了与以前相同的数组,其中包含“ Item”,但不会将其删除。哪里有问题?

2 个答案:

答案 0 :(得分:2)

.splice返回已删除的元素。实际上,您根本不应该使用.splice,因为它会改变原始数组。我知道您正在传播原始版本,但传播语法会产生浅表副本。所以要小心.slice最好也返回已删除的。在这种情况下,您可能需要同时使用.slice.concat的组合,也可以使用.filter

return {
    ...state,
    searchItems: state.searchItems.filter( (_,i) => 
        i !== state.searchItems.length-1
    ),
};

答案 1 :(得分:0)

删除最后一项的最简单方法:

return {
    ...state,
    searchItems: state.searchItems.slice(0, -1)
};