react组件的生命周期

文章目录

  • react组件的生命周期
    • 总览
    • 挂载时
    • 更新时
    • 卸载时
    • 被移除的生命周期

总览

React的生命周期大体可以分为三个部分,一,挂载阶段;二更新阶段三,卸载阶段

挂载时

  1. constructor:接收两个参数props,context;注意:使用construct时必须把props作为参数传给super,不然this指向会发生错误。

  2. getDerivedStateFromProps(nextProps,state):

    1. 返回值:返回一个对象来更新state,如果时null则不更新;

    2. 参数:第一个是最新的props,第二个是之前的state;

    3. getDerivedStateFromProps是一个静态函数,也就是在getDerivedStateFromProps无法访问到this,而应该用nextProps和state来进行判断。

    4. 是react16.4版本的更新。

    5. static getDerivedStateFromProps(nextProps, prevState) {const {type} = nextProps;// 当传入的type发生变化的时候,更新stateif (type !== prevState.type) {return {type,};}// 否则,对于state不进行任何操作return null;
      }
      
  3. render( ) :在挂载和更新时都会使用到render函数。

  4. componentDidMounted ( ):可以在这里获取dom元素操作页面和发送AJAX请求。可以加上async。里面有setState函数时不会再进入该生命周期

更新时

state或者props发生改变时

  1. getDerivedStateFromProps(nextProps,state)

  2. shouldComponentUpdate(nextProps,nextState):

    1. 作用:主要用于性能优化,唯一控制组件重新渲染的生命周期;可以通过return false来阻止组件的更新,return true继续进入生命周期中。

    2. 使用:nextProps和nextState可以获得最新的props和state,而this.props和this.state可以获得当前的props和state,可以通过比较这二者决定是否相同,然后来决定是否跳过。

    3. 代码:

      shouldComponentUpdate(nextProps, nextState) {if (this.props.color !== nextProps.color) {   //判断color是否改变return true;}if (this.state.count !== nextState.count) {   //判断count是否改变return true;}return false;    //如果两个都不改变,则不重新渲染}
      
  3. render

  4. getSnapshotBeforeUpdate:

    1. 作用:在方法在最近一次渲染输出(提交到 DOM 节点)之前调用,我们可以访问更新前的 props 和 state。

    2. 注意:getSnapshotBeforeUpdate() 方法需要与 componentDidUpdate() 方法一起使用,否则会出现错误。

    3. 代码:

      class Header extends React.Component {constructor(props) {super(props);this.state = {favoritesite: "runoob"};}componentDidMount() {setTimeout(() => {this.setState({favoritesite: "google"})}, 1000)}getSnapshotBeforeUpdate(prevProps, prevState) {document.getElementById("div1").innerHTML ="在更新前喜欢的网站是:" + prevState.favoritesite;}componentDidUpdate() {document.getElementById("div2").innerHTML ="更新后喜欢的网站是:" + this.state.favoritesite;}render() {return (<div><h1>我喜欢的网站是 {this.state.favoritesite}</h1><div id="div1"></div><div id="div2"></div></div>);}
      }ReactDOM.render(<Header />, document.getElementById('root'));
      
  5. componentDidUpdate:注意:每当setState改变数据时都会重新进入该生命周期,所以不要在这里面写setState函数,不然会发生死循环。

forceUpdate时

不会经过shouldComponentUpdate阶段

卸载时

  1. componentWillUnmount:可以在此清除定时器,鼠标移动事件等。

被移除的生命周期

  1. componentWillMount ——>UNSAFE_componentWillMount
  2. componentWillReceiveProps ——>UNSAFE_componentWillReceiveProps
  3. componentWillUpdate——>UNSAFE_componentWillUpdate

移除并不代表不能使用,实际上在生命周期前面添加上**UNSAFE_**即可。

React组件的生命周期相关推荐

  1. React 初探 [五] React 组件的生命周期

    说起生命周期,最先接触的是Andorid 开发中 Activity 和 Fragment 的生命周期,再者是Vue 组件,那么今天要梳理的是React 组件的生命周期,可见对生命周期的理解和掌握对组件 ...

  2. React 组件的生命周期

    目录 前言 一.React 实例的生命周期及其与 Hooks 的映射 1.旧的生命周期图 2.新的生命周期图 3.新旧生命周期及其与 Hooks 的映射表 二.部分生命周期详解 1.getDerive ...

  3. React 组件的生命周期详解

    2019独角兽企业重金招聘Python工程师标准>>> 概念:在组建的创建.到加载到页面上运行以及组件被销毁的过程中,总是伴随的各种各样的事件,这些在组件特定时期,出触发的事件就叫做 ...

  4. react学习笔记(4)组件的生命周期(运行阶段和销毁阶段)以及事件处理函数

    1.组件的生命周期 接着(2)中的组件生命周期 1.运行阶段 运行阶段有5个步骤: componentWillReceiveProps: 父组件修改属性触发,可以修改新属性,修改状态. shouldC ...

  5. Android之React Native 中组件的生命周期

    React Native 中组件的生命周期 概述 就像 Android 开发中的 View 一样,React Native(RN) 中的组件也有生命周期(Lifecycle).所谓生命周期,就是一个对 ...

  6. React简介、虚拟DOM、Diff算法、创建React项目、JSX语法、组件、组件声明方式、组件传值props和state、组件的生命周期

    React简介: 前面只是简单介绍移动APP开发,后面还会继续深入介绍移动app开发:其中想要用ReactNative开发出更出色的应用,那么就得学好React,下面将介绍React: React 是 ...

  7. native react 更新机制_React Native - 组件的生命周期详解(附:各阶段调用的方法)...

    一个 React Native 组件从它被 React Native框架加载,到最终被 React Native 框架卸载,会经历一个完整的生命周期. 在这个生命周期中,我们可以定义一些生命周期函数, ...

  8. React 深入系列4:组件的生命周期

    文:徐超,<React进阶之路>作者 授权发布,转载请注明作者及出处 React 深入系列4:组件的生命周期 React 深入系列,深入讲解了React中的重点概念.特性和模式等,旨在帮助 ...

  9. 03 为什么 React 16 要更改组件的生命周期?(下)

    通过对上一个课时的学习,你已经对 React 15 的生命周期有了系统的掌握和理解.本课时,我将在此基础上,对 React 16 以来的生命周期进行剖析.在理解"是什么"的基础上, ...

最新文章

  1. KS006基于SSM实现学生成绩管理系统
  2. 怎么配置php服务器时间,php如何设置服务器时间
  3. Windows——在当前目录打开 PowerShell 命令窗口
  4. 关于软件项目中的风险
  5. linux一级常用目录,小蚂蚁学习Linux(3)——Linux一级目录说明和常用命令解释...
  6. 灰度资产管理总规模升至460亿美元
  7. PHP的线程安全与非线程(NTS)安全版本的区别
  8. 关闭计算机端口的命令行,关闭端口命令,小编教你如何关闭电脑80端口
  9. 什么是悬赏任务APP源码?
  10. p2p网络中的NAT穿透
  11. Slf4j与Log4j的区别
  12. 遗传算法,vector
  13. JasperReport
  14. 产品沉思录精选:西方人读孔子-有关德、礼及生死
  15. matlab fprintf输出矩阵
  16. 网易——奖学金、路灯
  17. [数学学习笔记]无穷小与无穷大
  18. 《笑着离开惠普》读书笔记之用制度来规范各级员工的行为
  19. yslow的安装(注意兼容性)
  20. 设置电脑右下角显示秒钟

热门文章

  1. 【Python核心】全局解释器锁GIL
  2. c语言需要的软件,需要C语言的需要什么工具软件
  3. 天池-安泰杯跨境电商智能算法大赛(冠军)方案分享
  4. 在Jetson Xavier NX上运行openpose
  5. 岚皋中学2021高考成绩查询,岚皋县岚皋中学2020年排名
  6. CCL2022自然语言处理国际前沿动态综述——开放域对话生成前沿综述
  7. Android Virtualview:淘宝、天猫 又一个动态化、高性能的UI框架力作
  8. 浅谈《魔法黎明(Dawn of Magic)》(终)
  9. java c语言语法对比_c语言和java语法有区别吗?
  10. 网站屏蔽所有人访问,只允许蜘蛛访问