为什么不赞成componentWillReceiveProps?

时间:2018-08-23 08:03:10

标签: reactjs

我通读了https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-props-change。我仍然不明白为什么他们必须弃用componentWillReceiveProps。
在componentWillReceiveProps中进行Ajax调用有什么害处?一旦ajax调用返回该值,我将更新状态,从而重新呈现该组件。

2 个答案:

答案 0 :(得分:11)

componentWillReceiveProps同步挂钩。在设置新道具和数据完成加载之间,需要在此挂钩中调用诸如数据获取之类的异步函数。

但是getDerivedStateFromProps异步钩子,不需要任何其他渲染。因此,由于以下原因而弃用componentWillReceiveProps

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

不会为您提供不必要的渲染。请注意,getDerivedStateFromProps仅在极少数情况下使用。因此,建议您尽可能使用componentDidUpdate钩子。


在比较componentWillMount和componentDidMount时会发生类似的情况。每当需要进行异步操作时都使用componentDidMount,并在所有情况下都忘记componentWillMount。在我的另一个post中,有关componentDidMount的更多说明。

答案 1 :(得分:0)

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

componentWillReceiveProps()内进行ajax调用可能会中断该流程。

我的直觉是,我们被轻率地引导以在组件外部进行Ajax调用,并将这些Ajax调用的所有结果传递给属性。它使您的组件非常干净且可测试。