分成三个阶段
1.Render阶段
纯净切没有副作用,可能会被react暂停,终止或者重新启动
2.Pre-commit (更新DOM节点)
可以读取DOM (没有真正的更新DOM)
3.commit
实际的状态更新到DOM节点上,可以使用DOM节点,更新一些内容
生命周期分成三个阶段
1.创建时
constructor(创建DOM)
(1)用于初始化内部状态,很少使用
(2)唯一可以直接修改state的地方
getDerivedStateFromProps(16.3新语录的api内容,用于外部的属性去初始化内部的状态上)
(1)当state需要从props初始化时使用
(2)尽量不要使用:维护两者状态一致性会增加复杂度
(3)每次render都会调用
(4)典型场景:表单控件获取默认值
render(描述uiDOM结构的地方 唯一需要定义的生命周期方法)
componentDidMount(创建请求完成之后会调的周期函数 可以写ajax请求,定义一些外部的资源)
(1)UI渲染完成后调用
(2)只执行一次
(3)典型场景:获取外部资源
2.更新时
会发生的事情
比如组件有一个新的属性传进来,或者内部修改了state, false Update强制组件刷新
getDerivedStateFromProps(外部属性得到内部的状态)
shouldComponentUpdate(告诉组件是不是需要render 用户可以介入 做一些性能优化 即使props发生了变化但是页面并不需要变化 可以在此方法中返回false就可以阻止render )
(1)决定Virtual DOM是否要重绘
(2)一般可以由PureComponent自动实现
(3)典型场景:性能优化
render(计算虚拟DOM 内部ui状态 可以计算一些dev)
getSnapshotBeforreUpdate(16.3刚移入的方法)
(1)在页面render之前调用,state已更新
(2)典型场景:获取render之前的DOM状态
componentDidUpdate()
(1)每次UI更新时被调用
(2)典型场景:页面需要根据props变化重新获取数据
3.卸载时
componentWillUnmunt()
(1)组件移除时被调用
(2)典型场景:资源释放