为什么不推荐使用 componentWillReceiveProps?

IT技术 reactjs
2021-04-01 13:10:03

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

2个回答

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

但它getDerivedStateFromProps是一个异步钩子,不需要任何额外的渲染。因此,componentWillReceiveProps由于以下原因而被弃用:

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

这不会给你不必要的渲染。请注意,getDerivedStateFromProps它仅在极少数情况下使用。所以,我建议你尽量使用componentDidUpdatehook。


比较 componentWillMount 和 componentDidMount 时会发生类似的事情。每当您需要操作异步操作并在任何情况下忘记 componentWillMount 时,请使用 componentDidMount。关于 componentDidMount 的更多解释在我的另一篇文章中

你能解释一下什么是“同步钩子”吗?为什么你更喜欢 componentDidUpdate 而不是 componentWillReceiveProps
2021-05-31 13:10:03
我的困惑到此结束。非常感谢!
2021-06-04 13:10:03

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

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

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