我尝试使用filter方法从数组中删除一个元素,如下所示:
removeDisplate: (state, action: PayloadAction<string>) => {
console.log(action.payload);
state.map((item) => {
console.log(item.name);
});
state.filter((item) => item.name !== action.payload);
},
在我的前端这样调用它:
{cart.map((displate, index) => {
return (
<Card
sx={{
minHeight: "150px",
display: "flex",
padding: "10px",
gap: "10px",
backgroundColor: "black",
margin: "10px",
position: "relative",
}}
key={index}
>
<CloseIcon
sx={{
position: "absolute",
top: "10px",
right: "10px",
color: "red",
cursor: "pointer",
}}
onClick={() => handleRemoveDisplate(displate.name)}
/>
</Card>
);
})}
有效负载和状态项的名称都与控制台日志中的相同,但它仍然没有将其从数组中删除,有什么想法吗?
1条答案
按热度按时间jslywgbw1#
Array.prototype.filter
不会改变它所操作的数组,它返回一个***new***数组,其中删除了未通过 predicate 回调的元素。在切片缩减器中,您可以只返回过滤当前状态的结果作为下一个状态值。另外,因为你要修改这个数组,你不想***使用数组索引作为React键,使用一个更内在于你要Map的数据的值,比如
id
属性。示例: