【问题标题】:ReactJs how do i delete a row from a table?ReactJs如何从表中删除一行?
【发布时间】:2018-07-25 16:54:37
【问题描述】:

我正在使用 reactsjs。我有一个基于按钮单击添加行的表。这些行也被添加到行数组中。添加该行时,其中有一个按钮,单击该按钮将删除该行。这是我开始工作所需要的。行存储在数组中,就像在数组中一样。我通过查看示例进行了尝试。通过我的尝试,正在删除不正确的行。

这是我尝试过的代码:

constructor() {
    super();
    this.state = {
      tasks: []
    }
    this.handleDeleteRow = this.handleDeleteRow.bind(this);
  }

handleDeleteRow(i) {
    let rows = [...this.state.rows]
    rows.splice(i, 1)
    this.setState({ 
      rows: rows
    })
  }

一段代码:

<tbody>
{rows.map((row,i) => {
                return(
                    <tr key={i}>
                        <td scope="row" >{i}</td>
                        <td>{row.ex}</td>
                        <td>{row.ex}</td>
                        <td>{row.ex}</td>
                        <td>{row.ex}</td>
                        <td>{row.ex}</td>
                        <td>
                            this is the delete button
                        </td>
                    </tr>
                );
            })}
</tbody>

【问题讨论】:

  • 你能发一下 sn-p 你是如何准确渲染它们的吗?
  • @ŁukaszWojciechowski 我用 sn-p 更新了问题
  • @BeauBridges 你在哪里调用`handleDeleteRow`函数?
  • 你的删除按钮代码是什么?你如何将i 的值传递给handleDeleteRow 函数?

标签: reactjs


【解决方案1】:

答案取决于您如何调用handleDeleteRow

从您的评论中,您提到这是您的电话:

<a onClick={this.props.handleDeleteTask.bind(this)} > delete row </a>

试试这个:

<a onClick={i => this.handleDeleteRow(i)}>Delete Row</a>

但您必须确保始终使用相同的变量名。在原始代码 sn-p 中定义state.tasks,然后在删除函数中设置state.rows,在渲染函数中交替调用map rows(为此我只能假设您正在解构它像{rows} = this.state 这样的状态变量,但随后您调用了一个您尚未定义(至少对我们而言)的函数,称为handleDeleteTask

如果您想看到这项工作,您必须始终一丝不苟地保持一致。

【讨论】:

    【解决方案2】:

    我认为问题出在钥匙上。当您有一个数组 [a, b, c] 并删除 a 时,在新数组 [b, c] 中,键对应于错误的项目。请为您的桌子找到更好的钥匙。

    【讨论】:

    • 你建议我怎么做?
    • 这取决于你的数据结构。您是否有任何唯一标识该行的内容?身份证、姓名或其他任何东西?如果没有,那么也许您可以在构造/接收表数据时即时生成一些东西。
    猜你喜欢
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2021-11-27
    • 2012-09-22
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多