【发布时间】:2018-11-14 11:20:24
【问题描述】:
我将 React 与 NextJS 一起使用。
我有一个组件,它基本上是一个提供一些摘要的表格。 根据一些 UI 选择,该组件应显示适当的摘要。
以下代码运行良好。
class Summary extends Component{
state = {
total: 0,
pass: 0,
fail: 0,
passp: 0,
failp: 0
}
componentWillReceiveProps(props){
let total = props.results.length;
let pass = props.results.filter(r => r.status == 'pass').length;
let fail = total - pass;
let passp = (pass/(total || 1) *100).toFixed(2);
let failp = (fail/(total || 1) *100).toFixed(2);
this.setState({total, pass, fail, passp, failp});
}
render() {
return(
<Table color="teal" >
<Table.Header>
<Table.Row textAlign="center">
<Table.HeaderCell>TOTAL</Table.HeaderCell>
<Table.HeaderCell>PASS</Table.HeaderCell>
<Table.HeaderCell>FAIL</Table.HeaderCell>
<Table.HeaderCell>PASS %</Table.HeaderCell>
<Table.HeaderCell>FAIL %</Table.HeaderCell>
</Table.Row>
</Table.Header>
<Table.Body>
<Table.Row textAlign="center">
<Table.Cell>{this.state.total}</Table.Cell>
<Table.Cell >{this.state.pass}</Table.Cell>
<Table.Cell >{this.state.fail}</Table.Cell>
<Table.Cell >{this.state.passp}</Table.Cell>
<Table.Cell >{this.state.failp}</Table.Cell>
</Table.Row>
</Table.Body>
</Table>
);
}
}
看起来componentWillReceiveProps 将被弃用。我尝试了其他选项,例如shouldComponentUpdate 等。它们都导致无限循环。从道具更新状态以重新渲染此组件的最佳方法是什么?
【问题讨论】:
-
componentWillReceiveProps 将被弃用?你在使用 React17 吗?上面的脚本中没有导致无限循环的代码
-
@RIYAJKHAN 正如我所说,它将被弃用。这个组件也工作得很好。我正在寻找替代品
-
@DenisTsoi getDerivedStateFromProps 是静态的。我不能打电话给
setState -
您可以查看下面的答案以查看如何使用
getDerivedState设置状态-