我通读了https://reactjs.org/blog/2018/03/27/update-on-async-rendering.html#fetching-external-data-when-props-change。我仍然不明白为什么他们必须弃用componentWillReceiveProps。
在componentWillReceiveProps中进行Ajax调用有什么害处?一旦ajax调用返回该值,我将更新状态,从而重新呈现该组件。
答案 0 :(得分:11)
componentWillReceiveProps
是同步挂钩。在设置新道具和数据完成加载之间,需要在此挂钩中调用诸如数据获取之类的异步函数。
但是getDerivedStateFromProps
是异步钩子,不需要任何其他渲染。因此,由于以下原因而弃用componentWillReceiveProps
:
不会为您提供不必要的渲染。请注意,getDerivedStateFromProps
仅在极少数情况下使用。因此,建议您尽可能使用componentDidUpdate
钩子。
在比较componentWillMount和componentDidMount时会发生类似的情况。每当需要进行异步操作时都使用componentDidMount,并在所有情况下都忘记componentWillMount。在我的另一个post中,有关componentDidMount的更多说明。
答案 1 :(得分:0)
我的理解是,如果调用componentWillReceiveProps()
方法,则该组件的某些属性已更改,应该通知该组件并可能再次重新呈现。
在componentWillReceiveProps()
内进行ajax调用可能会中断该流程。
我的直觉是,我们被轻率地引导以在组件外部进行Ajax调用,并将这些Ajax调用的所有结果传递给属性。它使您的组件非常干净且可测试。