我正在动态地将表行添加到表中。下面是它在 UI 中的外观:
这是我用来创建新行的逻辑:
我有一个状态变量this.state = ({rows: []})
在“插入”按钮上单击我正在做的事情:
addNewRow = () => {
this.setState({rows: this.state.rows.concat([{}])});
}
在我的render()
我有以下代码:
const rows = this.state.rows.map((item, id) => {
return(
<tr key={id}>
<td>Something</td>
<td>Something</td>
<td>Something</td>
<td>Something</td>
<td><Button onClick={(event) => this.removeRow(event, id)}>Delete</Button></td>
</tr>
);
});
而且,显然我的决赛桌代码如下所示:
<Table borderless>
<tbody>
{rows}
</tbody>
<tfoot>
<tr>
<td>
<Button onClick={() => {this.addNewRow()}} size="sm" className="float-left">insert</Button>
</td>
</tr>
</tfoot>
</Table>
这是我的removeRow
功能:
removeRow = (event, id) => {
event.preventDefault();
var index = this.state.rows.indexOf(id);
this.state.rows.splice(index, 1);
this.setState({rows: this.state.rows});
}
整个代码有效。我已经更改了变量名称并从中删除了不需要的代码,但这是为了了解我是如何设计它的。
我的问题是当我点击“删除”按钮时,它总是删除行中的最后一个项目,而不是我点击的项目行。如何解决这个问题?
我用谷歌搜索了一下,发现很少有例子,老实说,我觉得它们很复杂,所以我决定走自己的路。
请告知需要做些什么来解决这个问题。