reactjs - reactjs如何获取表格单元格的当前值
问题描述
我正在使用 Html 表格来显示数据,我的目标是通过单击表格单元格来获取单元格值。并根据表格单元格返回的值设置状态。我正在使用 jquery 从它正在工作的表中获取值,但我无法更新状态。我正在使用句柄单击功能来更新用户单击表格单元格时的状态,但我不知道如何获取表格单元格值。
下面是用于显示数据的代码。
import React, { Component } from "react";
import $ from "jquery";
import "./../css/index.css";
import { BrowserRouter as Router, Switch, Route, Link,Redirect } from "react-router-dom";
class Table extends Component {
constructor(props) {
super(props);
this.state = {
accounts : [],
account:'',
region:'',
}
this.handleClick = this.handleClick.bind(this);
}
componentDidMount = async () => {
let _this = this;
let account = "";
let region = "";
$("table").on("click", "td", function(e) {
region = e.delegateTarget.tHead.rows[0].cells[this.cellIndex];
account = this.parentNode.cells[0];
account = $(account).text()
region = $(region).text()
console.log(region);
console.log(account);
});
const response = await fetch(
"",
{
headers: {
"x-api-key": ""
}
}
);
const data = await response.json();
this.setState({ accounts:data});
$(".main-table").clone(true).appendTo('#table-scroll').addClass('clone');
};
handleClick(){
let account = 'zahid';
let region = 'hussain'
this.setState(prevState => {
prevState.account = '';
prevState.region = '';
return {
count: prevState.count * 2,
account: prevState.account + account,
region: prevState.region + region
}
})
}
renderTableData() {
return this.state.accounts.map((account, index) => {
const {
environment,
account_number,
bu,
account_alias,
resource_name
} = account; //destructuring
const regions = account.regions;
return (
<tr key={index}>
<td className="fixed-side">{account_number}</td>
<td className="fixed-side">{account_alias}</td>
<td className="fixed-side">{environment}</td>
<td className="fixed-side">{bu}</td>
<td>
<Link to={{
pathname:"/securityGroups",
state: { account:'057346956084',region:'us-east-1'}}}>
{regions["us-east-1"]}
</Link>
</td>
<td>{regions["us-east-2"]}</td>
<td>{regions["us-west-1"]}</td>
<td>{regions["us-west-2"]}</td>
<td>{regions["us-gov-west-1"]}</td>
<td>{regions["us-gov-east-1"]}</td>
<td>{regions["sa-east-1"]}</td>
<td>{regions["me-south-1"]}</td>
<td onClick={this.handleClick}>{regions["eu-north-1"]}</td>
<td>{regions["eu-west-3"]}</td>
<td>{regions["eu-west-2"]}</td>
<td>{regions["eu-west-1"]}</td>
<td>{regions["eu-central-1"]}</td>
<td>{regions["cn-northwest-1"]}</td>
<td>{regions["cn-north-1"]}</td>
<td>{regions["ca-central-1"]}</td>
<td>{regions["ap-northeast-1"]}</td>
<td>{regions["ap-southeast-2"]}</td>
<td>{regions["ap-southeast-1"]}</td>
<td>{regions["ap-northeast-2"]}</td>
<td>{regions["ap-northeast-3"]}</td>
<td>{regions["ap-south-1"]}</td>
<td>{regions["ap-east-1"]}</td>
</tr>
);
});
}
render() {
console.log(this.state.count);
console.log(this.state.account);
return (
<div className="wrapper">
<div id="table-scroll" className="table-scroll">
<div className="table-fixed-right table-wrap">
<table className="main-table">
<thead>
<tr>
<th className="fixed-side" scope="col">Account Number</th>
<th className="fixed-side" scope="col">Account Alias</th>
<th className="fixed-side" scope="col">Environment</th>
<th className="fixed-side" scope="col">BU</th>
<th scope="col">us-gov-west-1</th>
<th scope="col">us-gov-east-1</th>
<th scope="col">sa-east-1</th>
<th scope="col">me-south-1</th>
<th scope="col">eu-north-1 </th>
<th scope="col">eu-west-3</th>
<th scope="col">eu-west-2</th>
<th scope="col">eu-west-1</th>
<th scope="col"> eu-central-1</th>
<th scope="col">cn-northwest-1</th>
<th scope="col"> cn-north-1</th>
<th scope="col">ca-central-1</th>
<th scope="col">ap-northeast-1</th>
<th scope="col"> ap-southeast-2</th>
<th scope="col">ap-southeast-1</th>
<th scope="col">ap-northeast-2</th>
<th scope="col">ap-northeast-3</th>
<th scope="col">ap-south-1</th>
<th scope="col">ap-east-1</th>
<th scope="col">us-west-2</th>
<th scope="col">us-west-1</th>
</tr>
</thead>
<tbody>
{this.renderTableData()}
{/* <button onClick={this.handleClick}>{this.state.account}</button> */}
</tbody>
</table>
</div>
</div>
</div>
);
}
}
export default Table;
下图是我的输出 [![在此处输入图像描述][1]][1]
谁能告诉我如何做到这一点。
请看下图我必须得到红色框的值[![在此处输入图像描述][2]][2]已指定
解决方案
如果你使用 react,你真的不需要 jQuery。React 使操作 dom 变得非常容易和快速。将 jQuery 与 react 一起使用是一种反模式。
话虽如此,在您的示例中,您将希望使用onClick
并且如果您知道单元格的内容(在本例中是您在 UI 中显示的内容),您可以将该值传递给处理程序。
onClick
在细胞上使用:
// here we pass handleCellClick the value of `regions["us-east-2"])`
<td onClick={() => handleCellClick(regions["us-east-2"])}>
{regions["us-east-2"]}
</td>
在您的组件中定义单击处理程序,如下所示。 content
将是你通过的任何东西。
handleCellClick(content) {
//... do stuff
}
要从表格标题中获取文本:
<th scope="col" onClick={this.handleHeaderClick}>
us-gov-west-1
</th>
并定义handleHeaderClick
为:
handleHeaderClick(event) {
const value = event.target.textContent;
console.log(value);
}
如果您只需要传递单击的表格上任何内容的文本内容,无论是单元格还是表格标题,您都可以使用相同的模式。如果是这种情况,您可以对每个元素使用以相同方式绑定的单个函数。如果您需要传递其他参数以及获取textContent
它,它将如下所示:
<td
onClick={event => this.handleClickWithAdditionalArgs(event, "Whatever other value I want to pass")}>
{regions["me-south-1"]}
</td>
函数定义为:
handleClickWithAdditionalArgs(event, otherArg) {
const value = event.target.textContent;
console.log(value); // the text in the element clicked
console.log(otherArg); // whatever else you pass
}
同样,您提到需要在点击时发送“帐户”。根据您提供的代码,我不知道那是什么。如果你澄清你的意思,我可以告诉你。您要求在单击时获取单元格的内容,我现在已经展示了如何以多种方式执行此操作。1)通过将您想要的任何值显式传递给您的函数,以及 2)通过解析 dom 以获取textContent
.
推荐阅读
- ruby-on-rails - 看看 created_at 在 Rails 中是否已经过了 24 小时
- ssl - Azure Function Apps 如何处理客户端证书身份验证?
- javascript - 测试具有内部功能的功能
- netty - tcp 握手中 syn/ack 数据包中的 Channeloption.ip-tos-bit 设置不正确
- spring - 在 spring 中从多线程 kafkalisteners 中消费 onetopic
- sphinx - 狮身人面像 / Manticore - 以一个普通索引为基础?
- google-sheets - ARRAY 公式查找最后一行以包含 Google 表格中的值
- python - 连接两个数据帧并排除重叠行
- react-native - React-Native Map subScribeLocationChanges()
- mysql - 基于可选查询参数返回列表