react生命周期?16版本删除了什么钩子函数?为什么删除?
react生命周期?16版本删除了什么钩子函数?为什么删除?
react和vue一样,生命周期也分为三个阶段:初始化、运行中、销毁。
react生命周期在16后面版本进行了更新迭代,初始化阶段生命周期顺序:
先执行constructor,在这里可以创建组件实例,传递属性,挂载初始状态、this-binding
然后执行static getDerivedStateFromProps, 这是新增的一个生命周期钩子函数,本身是一个静态方法,内部不能访问this,可以根据当前的属性和状态生成一个派生的状态,但是需要注意的是,任何属性和状态变化都会再次引起这个钩子函数的执行,所以往往会存在一些性能问题。需要自行做缓存优化。
接下来删除了一个componentWillMount,类似与vue中的beforeMount,因为react提倡render前不做副作用动作,保持纯净,所以被废弃。
接下来执行render函数,在render中也不要做副作用动作,容易造成死循环,作用就是生成虚拟dom结构。
最后执行的是componentDidMount,在这里可以做副作用动作了,初始的调用接口、dom操作、一些插件的初始化、事件的绑定。
当组件的属性和状态变化或者执行forceUpdate的时候, 会引起运行中阶段的钩子函数执行。
接下来删除了一个componentWillReceiveProps,这个钩子函数会在属性更新的时候执行,我们之前可以在这里根据更新后的属性来更改自身的状态或者做一些其他的逻辑动作,现在可以利用getDerivedStateFromProps替代,并且因为render前不能做副作用,所以废弃。
首先还是执行static getDerivedStateFromProps, 再次进行派生状态的计算生成。
接下来会执行shouldComponentUpdate,在这个钩子函数中可以通过this上当前的属性和状态与函数参数中接收到更改后的属性和状态进行对比,判断是否要继续执行其他的生命周期钩子函数,提升性能,需要注意的是forceUpdate执行后,不会执行shouldComponentUpdate,也可以利用PureComponent父类中默认的浅对比的shouldComponentUpdate来优化效果。
猜你喜欢LIKE
相关推荐HOT
更多>>算法评测标准---空间复杂度是什么?
算法评测标准---空间复杂度是什么?空间复杂度是什么?一. 空间复杂度的概念,复杂度(Space Complexity),是对一个算法在运行过程中临时占用存...详情>>
2023-03-23 20:15:04怎么用css画三角形?
怎么用css画三角形?border这里的像素值 和 border-left这里的像素值可以是不一样的,也可以是一样的,根据三角形的形状来进行具体设置值即可,要...详情>>
2023-03-23 15:27:16Maven集成 tomcat插件及使用教程
在实际的项目开发中,特别是分布式项目,往往有N多个子项目需要同时启动测试。这样多个项目引用tomcat插件,配置不同的端口,就可以同时启动N个...详情>>
2023-02-23 14:44:00扫盲CSS中常见的单位
Px是pixel的简写, 被称之为像素单位, px可以在计算机屏幕上,能达到预期的效果,在打印机和其它的高分辨率设备上,它又能取得所希望的效果, 一...详情>>
2023-02-16 13:47:00热门推荐
如何配置Java环境变量?有方法吗?
沸java变量的作用域是什么?
热什么是Java循环?
热switch语句的case和default有顺序吗?
新SpringBoot中使用redis 新手入门
vue的watch和computed的区别以及特点是什么?
算法评测标准---空间复杂度是什么?
Spring整合Junit框架是什么?
break和continue必须要在循环中使用吗?
怎么用css画三角形?
手把手教你搭建Oauth2授权服务!
为什么不能用break?
什么是foreach循环?它有哪些优点和局限性?
react生命周期?16版本删除了什么钩子函数?为什么删除?