为什么要弃用componentWillReceiveProps?

Shr*_*ani 17 reactjs

我通读了https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-props-change.我仍然无法理解为什么他们必须弃用componentWillReceiveProps.
在componentWillReceiveProps中进行ajax调用有什么危害?一旦ajax调用返回值,我就更新状态,从而重新渲染组件.

Bho*_*yar 27

componentWillReceiveProps是一个同步钩子.调用异步函数(如在此钩子中获取数据)将需要在设置新道具和数据加载完成之间进行渲染.

不过getDerivedStateFromProps是一个异步的钩子将不需要任何额外的渲染.因此,componentWillReceiveProps正在弃用以下原因:

  1. 使用getDerivedStateFromProps
  2. 或者,使用componentDidUpdate

哪个不会给你不必要的渲染.请注意,getDerivedStateFromProps仅在极少数情况下使用.所以,我建议你尽量使用componentDidUpdate钩子.


比较componentWillMount和componentDidMount时会发生类似的事情.无论何时需要操作异步操作,都要使用componentDidMount,并在所有条件下忘记componentWillMount.关于componentDidMount的更多解释在我的另一篇文章中.

  • 您能否解释一下什么是“同步钩子”?以及为什么您偏向componentWillReceiveProps而不是componentDidUpdate (2认同)

Grz*_*lak 7

我的理解是,如果componentWillReceiveProps()正在调用该方法,则组件的某些属性已更改,并且应该通知该组件并可能再次重新渲染。

在内部进行 ajax 调用componentWillReceiveProps()可能会破坏该流程。

我的直觉是,我们被温和地引导到组件外部进行 ajax 调用,并通过属性传递这些 ajax 调用的所有结果。它使您的组件非常干净和可测试。