javascript - ReactJS 可编辑表格单元格

标签 javascript reactjs

我想编辑和更新单个表格单元格值。我创建了一个函数(返回一堆选项),该函数被称为该特定单元格的 onClick,但任何单元格的 onClick,该列中的所有元素都将被替换。

我做错了什么?

https://jsfiddle.net/gkLe4qu0/ (我说的是状态栏)

<tbody>
  {requestsFiltered.map((request, i) =>(
    <tr key={i} className={request.status}>
      <td> {request.title} </td>
      <td onClick={() => this.editStatus(event)}>
        <a id={request.id} data-toggle="tooltip" title="Click to edit status">
          {
            this.state.isStatusClicked ? <StatusOptions /> : request.status
          }
        </a>
      </td>
      <td> {request.created_at.format('YYYY-MM-DD')} </td>
      <td> {request.updated_at.format('YYYY-MM-DD')} </td>
      <td>
        <a href="#" id={request.id} onClick={() => this.deleteRow(event)}> 
          Delete 
        </a> 
      </td>
    </tr>
  ))}
</tbody>

最佳答案

正如 Hardik Modha 在评论中提到的,您缺少行级别标识,但您可以利用 map 索引来实现此功能。无需维护单独的 statusId 等。

<tbody>
  {requestsFiltered.map((request, i) =>(
    <tr key={i} className={request.status}>
      <td> {request.title} </td>
      <td onClick={() => this.editStatus(event, i)}>
        <a id={request.id} data-toggle="tooltip" title="Click to edit status">
          {
            this.state.isStatusClicked == i ? <StatusOptions /> : request.status
          }
        </a>
      </td>
      <td> {request.created_at.format('YYYY-MM-DD')} </td>
      <td> {request.updated_at.format('YYYY-MM-DD')} </td>
      <td>
        <a href="#" id={request.id} onClick={() => this.deleteRow(event)}> 
          Delete 
        </a> 
      </td>
    </tr>
  ))}
</tbody>

还将 editStatus 更改为:

editStatus(event, index){
      console.log("edit status clicket");
      console.log(event.target.id);
      this.setState ({
          isStatusClicked: index
      })
}

引用所做的更改:https://jsfiddle.net/nagtan3/gkLe4qu0/4/

您仍然需要修复组合框更改的选择:

applyStatusChange(event, index) {
    const {value} = event.target;
    let newRequestData = this.state.requests.slice();

    newRequests[index]['status'] = value;
    this.setState ({
      requests: newRequests
    })
}

并使用上述方法:

<tbody>
      {requestsFiltered.map((request, i) =>(
        <tr key={i} className={request.status}>
          <td> {request.title} </td>
          <td onClick={() => this.editStatus(event, i)}>
            <a id={request.id} data-toggle="tooltip" title="Click to edit status">
              {
                this.state.isStatusClicked == i ? <StatusOptions onChangeMethod={(event) => applyStatusChange(event, i)} /> : request.status
              }
            </a>
          </td>
          <td> {request.created_at.format('YYYY-MM-DD')} </td>
          <td> {request.updated_at.format('YYYY-MM-DD')} </td>
          <td>
            <a href="#" id={request.id} onClick={() => this.deleteRow(event)}> 
              Delete 
            </a> 
          </td>
        </tr>
      ))}
    </tbody>

关于javascript - ReactJS 可编辑表格单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45093698/

相关文章:

reactjs - 如果我的基本路线相同,history.push() 在 react 路由器中不起作用

css - 使用 Tailwind 和 ReactJS 将图像居中对齐

javascript - 比较数组函数返回未定义

javascript - 如何通过 css 在文本之间添加额外的字符。已应用 Css 但显示错误结果

javascript - 如何为具有水平滚动的 flex 元素设置宽度?

javascript - 从 DOM 元素获取值,然后使用 React.js 设置为另一个值

reactjs - 我可以使用条件泛型在 typescript 中设置回调返回类型吗?

reactjs - 在 Ubuntu 20.04 中安装 mongoDB 失败

javascript - 如何更新 Div 中的文本?

javascript - 使用 AngularJS 更改元素的类