reactjs – React – componentWillReceiveProps替代

前端之家收集整理的这篇文章主要介绍了reactjs – React – componentWillReceiveProps替代前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Can getDerivedStateFromProps be used as an alternative to componentWillReceiveProps1个
我将React与NextJS一起使用.

我有一个组件,基本上是一个表格,给出了一些摘要.
根据一些UI选择,该组件应显示适当的摘要.

以下代码完美无缺.

  1. class Summary extends Component{
  2.  
  3. state = {
  4. total: 0,pass: 0,fail: 0,passp: 0,failp: 0
  5. }
  6.  
  7. componentWillReceiveProps(props){
  8. let total = props.results.length;
  9. let pass = props.results.filter(r => r.status == 'pass').length;
  10. let fail = total - pass;
  11. let passp = (pass/(total || 1) *100).toFixed(2);
  12. let failp = (fail/(total || 1) *100).toFixed(2);
  13. this.setState({total,pass,fail,passp,failp});
  14. }
  15.  
  16. render() {
  17. return(
  18. <Table color="teal" >
  19. <Table.Header>
  20. <Table.Row textAlign="center">
  21. <Table.HeaderCell>TOTAL</Table.HeaderCell>
  22. <Table.HeaderCell>PASS</Table.HeaderCell>
  23. <Table.HeaderCell>FAIL</Table.HeaderCell>
  24. <Table.HeaderCell>PASS %</Table.HeaderCell>
  25. <Table.HeaderCell>FAIL %</Table.HeaderCell>
  26. </Table.Row>
  27. </Table.Header>
  28. <Table.Body>
  29. <Table.Row textAlign="center">
  30. <Table.Cell>{this.state.total}</Table.Cell>
  31. <Table.Cell >{this.state.pass}</Table.Cell>
  32. <Table.Cell >{this.state.fail}</Table.Cell>
  33. <Table.Cell >{this.state.passp}</Table.Cell>
  34. <Table.Cell >{this.state.failp}</Table.Cell>
  35. </Table.Row>
  36. </Table.Body>
  37. </Table>
  38. );
  39. }
  40. }

看起来不推荐使用componentWillReceiveProps.我尝试了其他选项,如shouldComponentUpdate等.它们都导致无限循环.从props更新状态以重新渲染此组件的最佳方法是什么?

从反应 blog,16.3引入了componentWillRecieveProps的折旧通知.

作为解决方法,您将使用该方法

  1. static getDerivedStateFromProps(nextProps,prevState)

因此

  1. componentWillReceiveProps(props){
  2. let total = props.results.length;
  3. let pass = props.results.filter(r => r.status == 'pass').length;
  4. let fail = total - pass;
  5. let passp = (pass/(total || 1) *100).toFixed(2);
  6. let failp = (fail/(total || 1) *100).toFixed(2);
  7. this.setState({total,failp});
  8. }

  1. static getDerivedStateFromProps(nextProps,prevState) {
  2. if (nextProps.total !== prevState.total) {
  3. return ({ total: nextProps.total }) // <- this is setState equivalent
  4. }
  5. etc...
  6. }

猜你在找的React相关文章