我有以下代码:
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”,但不会将其删除。哪里有问题?
答案 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)
};