1.在生命周期的哪一步发起ajax请求?
我一般是在
ComponentDidMount
中。
解释:
之所以推荐在
componentDidMount
钩子中使用而不是componentWillMount
的原因:
因为请求是异步
的,效果上放在哪都一样,但是DidMount
中可以使用refs
。
官方也是推荐在componentDidMount中进行请求,当然放在willMount中可能会快一点,毕竟先运行嘛。
2.当组件发生更新时,组件的生命周期调用顺序
componentWillReceivProps
-shouldComponentUpdate
-componentWillUpdata
-render
-componentDidUpdate
组件收到新的props(props中的数据并不一定真正发生变化)—>决定是否需要继续执行更新过程 —>组件重新计算出新的虚拟Dom —> 虚拟Dom对应的真实Dom更新到真实Dom树中
3.react生命周期中,最适合与服务端进行数据交互的是哪个函数?
componentDidMount:在这个阶段,实例和dom已经挂载完成,可以进行相关的dom操作
4.shouldComponentUpdate 是做什么的,react 性能优化是哪个周期函数?
shouldComponentUpdate 允许我们
手动
地判断是否
要进行组件更新,根据组件的应用场景设置函数的合理返回值能够帮我们避免不必要
的更新
比如:
我们知道父级组件的render函数的重新渲染会引发子组件的render方法的重新渲染,但是有的时候子组件接收父组件的数据没有变动。子组件render的执行就会影响性能
5.触发多少次setstate,那么render会执行几次?
多次setState会
合并
为一次render,因为setState并不会
立即改变state的值,而是将其放到一个任务队列
里,最终将多个setState合并
,一次性更新页面。所以我们可以在代码里多次调用setState,每次只需要关注当前修改的字段即可