我有以下代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试执行这样的操作时,我收到了与之前相同的数组,里面有 'Item',它不会'删除它。哪里有问题?
.splice返回删除的元素。实际上,您根本不应该使用.splice,因为它会改变原始数组。我知道你在传播原始的,但传播的语法是浅拷贝。所以,要小心。.slice最好它还返回已删除的。在这种情况下,您需要使用.slice和.concat可能的组合,或者您可以使用.filter.
return {
...state,
searchItems: state.searchItems.filter( (_,i) =>
i !== state.searchItems.length-1
),
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1545 次 |
| 最近记录: |