React组件的生命周期 1. 初始化阶段: 由ReactDOM.render()触发---初次渲染
? ? ? ? 1. ?constructor()? ? ? // 完成了React数据的初始化。
? ? ? ? 2. ?componentWillMount()? ? ? ?//组件已经完成初始化数据,但是还未渲染DOM时执行的逻辑,主要用于服务端渲染。
? ? ? ? 3. ?render()? ? ? ?//??页面渲染执行的逻辑,render函数把jsx编译为函数并生成虚拟dom,然后通过其diff算法比较更新前后的新旧DOM树,并渲染更改后的节点。
? ? ? ? 4. ?componentDidMount()? ? ?//?组件第一次渲染完成时执行的逻辑,此时DOM节点已经生成了。
? ? ? ? ? ? ? ? ?一般在这个钩子中做一些初始化的事,例如:开启定时器、发送网络请求、订阅消息
?2. 更新阶段: 由组件内部this.setSate() 或 父组件render触发componentWillReceiveProps(nextProps)接收父组件新的props时,重新渲染组件执行的逻辑
? ? ? ? 1. ?shouldComponentUpdate()? ? ?//?在setState以后state发生变化,组件会进入重新渲染的流程时执行的逻辑。在这个生命周期中return false可以阻止组件的更新,主要用于性能优化。
? ? ? ? 2. ?componentWillUpdate()? ? ? //??shouldComponentUpdate返回true以后,组件进入重新渲染的流程时执行的逻辑
? ? ? ??3. ?render()? ? //??把jsx编译为函数并生成虚拟dom
? ? ? ? 4. ?componentDidUpdate()? ? ? //??重新渲染后执行的逻辑。
?3. 卸载组件: 由ReactDOM.unmountComponentAtNode()触发
? ? ? ? ? 1. ?componentWillUnmount()? ? ? ? ?// 组件的卸载前执行的逻辑
? ? ? ? ? ? ?一般在这个钩子中做一些收尾的事,例如:关闭定时器、取消订阅消息