【发布时间】:2020-10-27 05:53:25
【问题描述】:
我正在尝试将以下 sn-p 代码转换为使用基于功能的组件。
class IssueTable extends React.Component {
constructor() {
super();
this.state = { issues: [] };
setTimeout(() => {
this.createIssue(sampleIssue);
}, 2000);
}
componentDidMount() {
this.loadData();
}
loadData() {
setTimeout(() => {
this.setState({ issues: initialIssues });
}, 500);
}
createIssue(issue) {
issue.id = this.state.issues.length + 1;
issue.created = new Date();
const newIssueList = this.state.issues.slice();
newIssueList.push(issue);
this.setState({ issues: newIssueList });
}
render() {
const issueRows = this.state.issues.map(issue =>
<IssueRow key={issue.id} issue={issue} />
);
return (
<table className="bordered-table">
<thead>
<tr>
<th>ID</th>
<th>Status</th>
<th>Owner</th>
<th>Created</th>
<th>Effort</th>
<th>Due Date</th>
<th>Title</th>
</tr>
</thead>
<tbody>
{issueRows}
</tbody>
</table>
);
}
}
在尝试转换它时,表格会以某种方式不断重新渲染,我得到 key not unique 错误。我使用了 useEffect 但我不知道如何使用构造函数之类的功能。如何使用函数来实现它。 (issueRows 是一个处理表中行数据的组件)。功能版本如下图:
function IssueTable(){
const [issue1, setIssues] = React.useState([]);
React.useEffect(()=>{loadData()},[]);
setTimeout(() => {
createIssue(sampleIssue);
}, 2000);
function loadData() {
setTimeout(() => {
setIssues(issues);
}, 500);
}
function createIssue(issue) {
issue.id = issue1.length+1;
issue.created = new Date();
const newIssueList = issue1.slice();
newIssueList.push(issue);
setIssues(newIssueList);
}
const issueRows = issue1.map(issue =>
<IssueRow key={issue.id} issue={issue} />
)
return <table className="bordered-table">
<thead>
<tr>
<th>ID</th>
<th>Status</th>
<th>Owner</th>
<th>Created</th>
<th>Effort</th>
<th>Due Date</th>
<th>Title</th>
</tr>
</thead>
<tbody>
{issueRows}
</tbody>
</table>
}
function IssueRow(props){
return(
<tr>
<td>{props.issue.id}</td>
<td>{props.issue.status}</td>
<td>{props.issue.owner}</td>
<td>{props.issue.created.toDateString()}</td>
<td>{props.issue.effort}</td>
<td>{props.issue.due?props.issue.due.toDateString():""}</td>
<td>{props.issue.title}</td>
</tr>
);
}
【问题讨论】:
-
功能版也放在这里
-
sampleIssue和issues是什么?它们从未在您的功能组件中定义。
标签: javascript reactjs react-functional-component