刚接触react不久,所以想请教一下,请求数据是在组件加载前或者加载后再去求情数据,哪种方式会好一些?
react请求接口数据是在componentDidMount 还是componentWillMount周期好?
取决于你的应用场景。
一般我在componentDidMount
中获取异步数据。此时有若干细节需要处理。
比如,你调用的API返回一个JSON对象,而你要在render中以obj.prop
的方式显示其中的一个属性,那么需要声明一个空的obj
。
如果你的组件需要渲染子组件,而且子组件取决于父组件的某个属性,那么在子组件的componentDidMount
中进行处理会有问题:因为此时父组件中对应的属性可能还没有完整获取。在此时我会在子组件的componentDidUpdate
中处理。
从react的渲染原理来说,放在componentDidMount里面是最好的,但是对于同步的状态改变,是可以放在componentWillMount,异步的话最好放在componentDidMount,为什么?
componentWillMount里面状态改变并不会触发再次更新,而componentDidMount里面state的变化会触发更新,所以对于请求远程数据的,尽量放在componentDidMount,这样状态变化后,界面也会更新,而放在componentWillMount,有可能界面不会更新
componentWillMount是可以去掉的了。基本所有能在willMount需要做的同步任务都可以在constructor实现。
componentWillMount 是不能写异步等副作用任务的,出于2方面考虑:
1、 componentWillMount 是 ssr 里唯一执行的生命周期函数,如果你在这里subscribe了,那你写在willUnmount的unsubscribe方法就不会执行了。
2、fiber reconciler 有可能需要暂停这个函数提高render的优先级… 如果你写了异步任务,就没法暂停了。
子组件props是父组件异步调用接口生成的,子组件没法调用,如何阻止子组件在父组件接口调用成功前渲染?
子组件props是父组件异步调用接口生成的,子组件没法调用,如何阻止子组件在父组件接口调用成功前渲染?