javascript - 在数组过滤时反应更新,但在添加元素时反应更新
问题描述
我正在尝试模拟一个可以添加和删除产品的表,但是该组件仅在删除组件时更新,而不是在我添加新行时更新。我正在使用useState
这是我的数组:
const rowss = [
createData(1, 'Zapatillas', 2, 200),
createData(2, 'Chompas', 2, 100),
createData(3, 'Sandalias', 10, 300),
createData(4, 'Teclados', 1, 10),
createData(5, 'Mascarillas', 10, 2000),
createData(6, 'Celulares', 1, 200),
createData(7, 'Vasos', 20, 1000),
];
createData 函数工作正常。
这是我的useState
const [rows, setRows] = useState(rowss)
const handleDelete = (e, id) => {
let arr = rows.filter(obj => obj._id !== id)
setRows(arr)
}
const handleAddUi = (e) => {
let obj = createData(rows.length + 1, "test", "a", "b")
let arr = rows
arr.push(obj)
setRows(arr)
}
这就是它的显示方式:
{rows.map((row) => (
<TableRow key={row._id}>
<TableCell component="th" scope="row">
{row.product}
</TableCell>
<TableCell align="center">{row.tr}</TableCell>
<TableCell align="center">{row.mp}</TableCell>
<TableCell align="center">
{
!editActions[row._id] ?
<Fragment>
<CheckIcon className={classes.products__actionButtonsIcons} />
<CloseIcon className={classes.products__actionButtonsIcons} onClick={(e) => handleEdit(e, row._id)} />
</Fragment>
:
<CreateIcon className={classes.products__actionButtonsIcons} onClick={(e) => handleEdit(e, row._id)} />
}
</TableCell>
<TableCell className={classes.products__actionButtonsIcons} align="center" onClick={(e) => handleDelete(e, row._id)}><DeleteIcon /></TableCell>
</TableRow>
))}
只有当我删除一个项目时,我添加的项目才会出现,否则它不会显示。
解决方案
在 React 中,您应该通过将新引用传递给状态设置器来更新状态。和
let arr = rows
arr.push(obj)
您将状态设置为当前处于状态的相同数组,并对其进行变异。
始终避免使用 React 状态进行突变。创建一个新数组并将其置于 state 中:
setRows([...rows, obj]);