React 16
之后有三个⽣命周期被废弃(但并未删除)
componentWillMount
componentWillReceiveProps
componentWillUpdate
官⽅计划在17版本完全删除这三个函数,只保留UNSAVE_
前缀的三个函数,⽬的是为了向下兼容,但是对于开发者⽽⾔应该尽量避免使⽤他们,⽽是使⽤新增的⽣命周期函数替代它们,⽬前React 16.8 +
的⽣命周期分为三个阶段,分别是挂载阶段、更新阶段、卸载阶段。 挂载阶段: - constructor
: 构造函数,最先被执⾏,我们通常在构造函数⾥初始化state对象或者给⾃定义⽅法绑定this
- getDerivedStateFromProps
: static getDerivedStateFromProps(nextProps, prevState)
,这是个静态⽅法,当我们接收到新的属性想去修改我们state
,可以使⽤getDerivedStateFromProps
- render
: render
函数是纯函数,只返回需要渲染的东⻄,不应该包含其它的业务逻辑,可以返回原⽣的DOM
、React
组件、Fragment
、Portals
、字符串和数字、Boolean
和null
等内容 - componentDidMount
: 组件装载之后调⽤,此时我们可以获取到DOM
节点并操作,⽐如对canvas
,svg
的操作,服务器请求,订阅都可以写在这个⾥⾯,但是记得在componentWillUnmount
中取消订阅
更新阶段: - getDerivedStateFromProps
: 此⽅法在更新个挂载阶段都可能会调⽤ - shouldComponentUpdate
: shouldComponentUpdate(nextProps, nextState)
,有两个参数nextProps
和nextState
,表示新的属性和变化之后的state
,返回⼀个布尔值,true
表示会触发重新渲染,false
表示不会触发重新渲染,默认返回true
,我们通常利⽤此⽣命周期来优化React程序性能 - render
: 更新阶段也会触发此⽣命周期 - getSnapshotBeforeUpdate
: getSnapshotBeforeUpdate(prevProps, prevState)
,这个⽅法在render
之后, - componentDidUpdate
之前调⽤,有两个参数prevProps
和prevState
,表示之前的属性和之前的state
,这个函数有⼀个返回值,会作为第三个参数传给componentDidUpdate
,如果你不想要返回值,可以返回null
,此⽣命周期必须与componentDidUpdate
搭配使⽤ - componentDidUpdate
: componentDidUpdate(prevProps, prevState, snapshot)
,该⽅法在getSnapshotBeforeUpdate
⽅法之后被调⽤,有三个参数prevProps
,prevState
,snapshot
,表示之前的props
,之前的state
,和snapshot
。第三个参数是getSnapshotBeforeUpdate
返回的,如果触发某些回调函数时需要⽤到DOM
元素的状态,则将对⽐或计算的过程迁移至getSnapshotBeforeUpdate
,然后在componentDidUpdate
中统⼀触发回调或更新状态。
卸载阶段: - componentWillUnmount
: 当我们的组件被卸载或者销毁了就会调⽤,我们可以在这个函数⾥去清除⼀些定时器,取消⽹络请求,清理⽆效的DOM
元素等垃圾清理⼯作
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。