理解react生命周期,以及react生命周期的使用场景
前言:
在最初学习react的过程中,我对react的生命周期没有足够的重视,使得我在开发过程中遇到了很多问题。弄懂react的声明周期,可以让你的代码更加高效,更加优美。
什么是生命周期函数?
生命周期函数(钩子函数)通俗的说就是在某一时刻会被自动调用执行的函数。
react的生命周期可以分成四个部分:
props,state,render()函数:
1. render()函数会在props,state改变时触发。
2.子组件的render()函数会在父组件render()执行的时候被执行(这会导致一些性能问题,我们可以在子组件的componentshouldupdate函数中进行判断,优化性能)
在render(),创建虚拟dom,进行diff算法,更新dom树。
注意:不要在render中修改state,会导致死循环。
1.初始化
在这里可以初始化props,state
2.挂载
①:componentWillMount(): 注意:改生命周期在未来17版本中将被弃用(在这里请求异步数据,render可能不会渲染到,因为componentWillMount执行后,render立马执行)
组件被挂载到页面之前调用,整个生命周期中只会调用一次(组件更新时不会再调用)。
注意:在这里可修改state
②:componentDidMount():
组件被挂载到页面之后调用,整个生命周期只调用一次(组件更新不会调用)。
建议:在这里可以异步请求数据。在这里设置状态会触发重新渲染。但是不推荐在这里使用setState函数,它会触发一次额外的渲染,而且是在浏览器刷新屏幕之前执行,用户看不到这个状态。在这里使用setState函数会导致性能问题。
3.更新
new: getDerivedStateFromProps(nextProps,prevState)
新的静态getDerivedStateFromProps
生命周期在组件实例化以及接收新props(
只要父组件重新渲染,那么这个props不论值是否一样都是一个新的props
)
后调用。它可以返回一个对象来更新state
,或者返回null来表示新的props
不需要任何state
更新。
new:getSnapshotBeforeUpdate()
新的getSnapshotBeforeUpdate
生命周期在更新之前被调用(例如,在DOM被更新之前)。此生命周期的返回值将作为第三个参数传递给componentDidUpdate
。 (这个生命周期不是经常需要的,但可以用于在恢复期间手动保存滚动位置的情况。)
①: componentWillReceiveProps(nextprops): 注意:此生命周期在未来17版本中将被弃用
组件从父组件中接受了新的props(
只要父组件重新渲染,那么这个props不论值是否一样都是一个新的props
)
,并且组件已经存在时调用。(组件初始化时候不调用)。
注意:可以根据属性的变化,通过调用this.setState()
来更新你的组件状态,旧的属性还是可以通过this.props
来获取,这里调用更新状态是安全的,并不会触发额外的render
调用
②: shouldComponentUpdate(nextprops,nextstate):
组件更新之前调用(组件接受新的props或者state)。函数会返回一个布尔值,true才会更新组件。
注意:最好判断一下新旧两个props/state是否相同,相同则返回false不要触发更新。这样就不用生成新的dom树和旧的进行diff算法对比,从而优化性能。(因为父组件render()调用会使得子组件render()也被执行,引起性能问题)
③:componentWillUpdate(nextprops,nextstate): 注意:此生命周期在未来17版本中将被弃用
组件更新之前(componentshouldupdate返回true)时调用,组件初始化时不调用
注意:在这里可以更改state,nextstate.xxx = xxx,但是在这里不能调用setState函数,这会导致函数调用componentshouldupdate从而进入死循环。
④:componentDidUpdate():
组件更新完成之后调用,组件初始化时候不调用。
注意:可以在这里获取dom
4.卸载
①:componentWillUnmount():
组件即将被卸载时执行
注意:在这里清除一些不需要的监听和计时器
理解react生命周期,以及react生命周期的使用场景相关推荐
- Android之React Native 中组件的生命周期
React Native 中组件的生命周期 概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对 ...
- 前端React教程第二课 React生命周期设计思想
02 为什么 React 16 要更改组件的生命周期?(上) React 生命周期已经是一个老生常谈的话题了,几乎没有哪一门 React 入门教材会省略对组件生命周期的介绍.然而,入门教材在设计上往往 ...
- 【前端学习】React学习笔记-事件、生命周期、虚拟DOMdiffing
跟着尚硅谷的天禹老师学习React 看视频可以直接点击 b站视频地址 React中的事件处理 补充ref 上面的ref在React官网中提到不要被过度使用,在一些情况下可以使用其他方法来获取数据,比如 ...
- react组件生命周期_React组件生命周期-挂钩/方法介绍
react组件生命周期 React components have several lifecycle methods that you can override to run your code a ...
- [react] React16废弃了哪些生命周期?为什么?
[react] React16废弃了哪些生命周期?为什么? React16废弃的生命周期有3个will: componentWillMount componentWillReceiveProps co ...
- [react] 函数式组件有没有生命周期?为什么?
[react] 函数式组件有没有生命周期?为什么? 没有生命周期 因为他没有继承React.Component 所以也不需要render() 个人简介 我是歌谣,欢迎和大家一起交流前后端知识.放弃很容 ...
- react中用useEffect模拟组件生命周期
1. react中的生命周期 react中的class组件是拥有生命周期的. 生命周期分为:mounting,updating,unmounting三个阶段. 不同生命周期阶段包括不同的生命周期函数: ...
- vue生命周期和react生命周期对比。
生命周期 指的是组件从初始化开始到结束的过程 或者是生命周期是描述组件从开始到结束的过程,每个组件都具有生命周期,都对组件通过生命周期给予的钩子函数进行管理. 钩子函数 指的是系统某些状态和参数发生改 ...
- React、react生命周期、react生命周期运行过程、shouldComponentUpdate的用法
React.react生命周期.react生命周期运行过程 1.创建阶段 constructor(){super()console.log('执行构造函数')this.state={num:1}}UN ...
- java 静态变量生命周期(类生命周期)
java 静态变量生命周期(类生命周期) Static: 加载:java虚拟机在加载类的过程中为静态变量分配内存. 类变量:static变量在内存中只有一个,存放在方法区,属于类变量,被所有实例所共享 ...
最新文章
- 【JavaScript从入门到精通】第一课 初探JavaScript魅力-01
- java中final class的一点思考
- mysql的count()函数如何选择索引,千万级表的count()查询优化实例
- SQL盲注之时间注入
- 软件体系结构的风格(转载)
- 小白的CMMI3体验
- Spatial Transformer Networks(STN)详解
- Source Insight上手教程
- vscode vue解决跨域_在vs code 中如何创建一个自己的 Vue 模板代码
- 用iFrame遮挡DropDownList的方法
- 打开相机用鼠标画框,画下一个时上一个消失
- 编一程序,将两个字符串连接起来,不要用strcat函数.
- php linux unoconv,Linux-CentOS 安装 Unoconv
- CMOS反相器设计与仿真
- 五一培训 清北学堂 DAY3
- win10系统装服务器2008蓝屏,升级安装Win10正式版后出现蓝屏怎么办?Win10蓝屏原因分析及解决方法...
- opencv 播放mp4
- 网中人《shell十三问》简体版整理
- 安卓智能地图开发与实施六:离线基础底图 - ArcGIS Runtime SDK for Android(Version 100.0.0)
- 什么是CUID,CRUD的操作
热门文章
- Adobe Flash Player 29.0.0.140官方正式版
- golang 中 signal 包的 Notify 函数用法介绍
- python画函数图像网格_用python 画一个网格
- C语言调用函数如何返回多个变量值?【基础】
- 这本书能让你减肥/戒烟/工作脱困/摆脱债务/重掌生活
- 环与圈_扩大路径法证明
- 国内代码托管中心-码云
- 衣服、商品、商城网站模板首页,仿U袋网,vue+elementui简洁实现(二)
- 一篇文章理解JS中同步任务和异步任务以及宏任务与微任务的原理和执行机制
- Android SVG矢量资源的使用方法