const { useState } = React;
function Example({ data }) {
const [ tableData, setTableData ] = useState(data);
function handleRemove(e) {
const { id } = e.target.closest('tr').dataset;
const filtered = tableData.filter(obj => {
return obj.name !== id;
});
setTableData(filtered);
}
return (
<table>
{tableData.map(row => {
return (
<Row
key={row.name}
row={row}
handleRemove={handleRemove}
/>
);
})}
</table>
);
}
function Row({ row, handleRemove }) {
return (
<tr data-id={row.name}>
<td>{row.name}</td>
<td>{row.reference}</td>
<td>{row.description}</td>
<td>
<button
onClick={handleRemove}
>Remove
</button>
</td>
</tr>
);
}
const data = [
{name: "NAME 1", reference: "REF 1", description: "LOREM IPSUM"},
{name: "NAME 2", reference: "REF 2", description: "LOREM IPSUM"},
{name: "NAME 3", reference: "REF 3", description: "LOREM IPSUM"},
{name: "NAME 4", reference: "REF 4", description: "LOREM IPSUM"},
{name: "NAME 5", reference: "REF 5", description: "LOREM IPSUM"}
];
ReactDOM.render(
<Example data={data} />,
document.getElementById('react')
);
table { border-collapse: collapse; border: 1px solid #565656; }
td { border: 1px solid #dfdfdf; padding: 0.5em;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script>
<div id="react"></div>
th
中使用div
。3)ItemList
应该只是对数据进行map
并返回Items
数组-不需要useEffect
。这些是我简要查看代码时发现的。哦,ItemList
不需要自己的状态。 - Andyindex
作为元素的 key。然后,除非它真正影响了您的性能(也请阅读 https://kentcdodds.com/blog/fix-the-slow-render-before-you-fix-the-re-render),否则不必担心重新渲染。 - Gabriele Petrioli