【发布时间】:2021-01-21 10:31:21
【问题描述】:
我想通过单击删除图标从列表中删除对象,但是根据我的逻辑,要么从列表中删除所有内容,要么什么都没有,如果没有提供对象 ID,我不知道该怎么做,我什么都没有独一无二,我有点迷路了。 渲染与 useState 中一样多的 Food 的组件:
{cartFood.map((food) => {
return (
<CartFood
key={Math.random()}
foodName={food.foodName}
foodPrice={food.foodPrice}
numberOfPortions={food.numberOfPortions}
cartFood={cartFood}
setCartFood={setCartFood}
/>
);
})}
删除所选特定项目的逻辑(这不起作用,也是不好的解决方案,因为可能会出现两次相同名称和价格的情况)
const CartFood = ({
foodName,
foodPrice,
numberOfPortions,
cartFood,
setCartFood,
}) => {
const handleRemoveFood = () => {
setCartFood(
cartFood.filter(
(el) =>
el.foodName &&
el.foodPrice !== cartFood.foodName &&
cartFood.foodPrice
)
);
};
return (
<div className='cartFood-container'>
<p>{foodName}</p>
<p>x{numberOfPortions}</p>
<p>{foodPrice}kn</p>
<p>
<MdDeleteForever
className='cartFood__icon'
onClick={handleRemoveFood}
/>
</p>
</div>
);
};
export default CartFood;
对象列表如下所示:
[{
foodName: "Njoki with sos"
foodPrice: 35
numberOfPortions: 1
},
{
foodName: "Chicken Wingos"
foodPrice: 45
numberOfPortions: 2
}]
【问题讨论】:
-
你想到这个
const [cartFood, setCartFood] = useState([]);还是别的什么? -
只要您的列表项不是太大并且您的列表很长,您也可以将列表项作为字符串进行比较:cartFood.filter((el) => JSON.stringify( el) !== JSON.stringify(cartFood))
标签: javascript reactjs react-hooks