生命周期简介
React
组件的生命周期实际是提供给React
用于将React
元素构建渲染挂载到真实的Dom
节点的各个时期的钩子函数。各个生命周期函数提供,使得在开发组件时可以控制各个时期执行不同的操作,如异步的获取数据等。
上图是基于
React: '^16.4'
的生命周期
挂载
组件首次被实例化创建并插入DOM
中需要执行的生命周期函数:
- constructor():需要在组件内初始化
state
或进行方法绑定时,需要定义constructor()
函数。不可在constructor()
函数中调用setState()
。 - static getDerivedStateFromProps():执行
getDerivedStateFromProps
函数返回我们要的更新的state
,React
会根据函数的返回值拿到新的属性。 - render():函数类组件必须定义的
render()
函数,是类组件中唯一必须实现的方法。render()
函数应为纯函数,也就是说只要组件state
和props
没有变化,返回的结果是相同的。其返回结果可以是:1、React
元素;2、数组或 fragments;3、Portals;4、字符串或数值类型;5、布尔值或null。不可在render()
函数中调用setState()
。 - componentDidMount():组件被挂载插入到
Dom
中调用此方法,可以在此方法内执行副作用操作,如获取数据,更新state
等操作。
更新
当组件的props
或state
改变时会触发更新需要执行的生命周期函数:
- static getDerivedStateFromProps():
getDerivedStateFromProps
会在调用render
方法之前调用,并且在初始挂载及后续更新时都会被调用。它应返回一个对象来更新state
,如果返回null
则不更新任何内容。 - shouldComponentUpdate():根据
shouldComponentUpdate()
的返回值,判断React
组件的是否执行更新操作。React.PureComponent
就是基于浅比较进行性能优化的。一般在实际组件实践中,不建议使用该方法阻断更新过程,如果有需要建议使用React.PureComponent
。 - render():在组件更新阶段时如果
shouldComponentUpdate()
返回false
值时,将不执行render()
函数。 - getSnapshotBeforeUpdate()&