【发布时间】:2021-08-21 17:14:13
【问题描述】:
我正在尝试创建一个带有删除按钮的购物清单,但是当我单击它时,其他项目被删除并且之前的值仍然保留在屏幕上,即使第二次删除也是如此。请假设自定义按钮和图标已经是单独的包这是代码 -
import React, { useState } from 'react';
import { CButton, CDeleteButton } from '@custom/pkg';
const ShoppingList = () => {
const [state, setState] = useState(
[{ name: 'Apple', price: 60 }, { name: 'Banana', price: 20 }]
)
return (
<>
<h2>Product List</h2>
{state.map(({name, price}, idx) => (
<>
<div key={idx}>
<div>{name}</div>
<div>{price}</div>
<div>
<CButton id={idx} onClick={() => {
setState((prev) => [...prev.splice(idx, 1)])
}}>
<CDeleteButton/>
</CButton>
</div>
</div>
</>
))}
</>
)
}
export default ShoppingList;
这个组件被导入一个模态组件并被渲染。如果我删除"Apple",它仍然显示在屏幕上,"Banana" 被删除,反之亦然。
【问题讨论】:
-
不要使用数组索引作为键。如果您没有每个项目的唯一标识符,最好使用
<div key={`${name}-${idx}`}>,这样在删除元素时更难与之前的 id 发生冲突。
标签: reactjs react-hooks use-state