热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

React生命周期函数执行顺序

目录一、数据加载时二、数据更新时三、组件销毁一、数据加载时constructor--componentWilMount--render--componentDidMo

目录

一、数据加载时

二、数据更新时

三、组件销毁



一、数据加载时

constructor-->componentWilMount-->render-->componentDidMount

注:在版本16.4之后,废除了componentWillMount,则顺序如下:

constructor()-->static getDerivedStateFromProps()-->render()-->componentDidMount()

import React, { Component } from 'react'export default class Lifecycle extends Component {constructor(props){super(props);console.log('01 构造函数');}//组件将要被挂载componentWillMount(){console.log('02 组件挂载前触发');}//组件挂载完成componentDidMount(){console.log('04 组件挂载完成');}render() {console.log('03 数据渲染');return (

React 声明周期函数

)}
}

getDerivedStateFromProps

一个静态方法,所以不能在这个函数里面使用this,这个函数有两个参数propsstate,分别指接收到的新参数和当前的state对象,这个函数会返回一个对象用来更新当前的state对象,如果不需要更新可以返回null

场景: 当我们接收到新的属性想去修改我们state,可以使用getDerivedStateFromProps

class ExampleComponent extends React.Component {// Initialize state in constructor,// Or with a property initializer.state = {};static getDerivedStateFromProps(nextProps, prevState) {if (prevState.someMirroredValue !== nextProps.someValue) {return {derivedData: computeDerivedState(nextProps),someMirroredValue: nextProps.someValue};}// Return null to indicate no change to state.return null;}
}

二、数据更新时

shouldComponentUpdate -->componentWillUpdate--->render -->componentDidUpdate

版本更新后顺序:

static getDerivedStateFromProps()-->static shouldComponentUpdate()-->render()-->static getSnapshotBeforeUpdate()-->componentDidUpdate()

import React, { Component } from 'react'export default class Lifecycle extends Component {constructor(props){super(props);this.state={title:''}console.log('01 构造函数');}shouldComponentUpdate = (nextProps, nextState) => {console.log('更新的数据',nextState);console.log('01 数据是否要更新');return true;}//组件更新前componentWillUpdate(){console.log('02 数据将要更新');}//组件更新完成componentDidUpdate(){console.log('04 数据更新完毕');}updata=()=>{this.setState({title:'update 完成'})}render() {console.log('03 数据渲染');return (

React 声明周期函数

)}
}

getSnapshotBeforeUpdate

有两个参数prevPropsprevState,表示之前的属性和之前的state,这个函数一定有一个返回值,会作为第三个参数传递给componentDidUpdate,如果不想返回值,则返回null。该方法一定要和componentDidupdate一起使用,否则控制台会有警告

三、组件销毁

//子组件中 componentWillUnmount(){console.log('组件销毁前触发');}//父组件中
import React, { Component } from 'react';
import Lifecycle from './components/Lifecycle'
class App extends Component {constructor(props){super(props);this.state={flag:true}}destroy=()=>{this.setState({flag:!this.state.flag})}render() {return (

{this.state.flag?:''}
);}
}

错误处理

当渲染过程过,生命周期或子组件的构造函数中抛出错误时,会调用如下方法:

static getDerivedStateFromError()

componentDidCatch()

总结

1.  在 v16版本后 引入了 Fiber机制,Fiber将原先的同步渲染改为异步渲染

2. 由于原先有些生命周期可能会被打断,所以可能会出现多次调用的情况,因此替换方案如下:

        2.1 geDerivedStateFromProps 替换 componentWillReciveProps

        2.2 getSnapshotBeforeUpdate 替换 componentWillUpdate


推荐阅读
  • 详解react组件通讯方式(多种)
    这篇文章主要介绍了详解react组件通讯方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • 展开全部下面的代码是创建一个立方体Thisexamplescreatesanddisplaysasimplebox.#Thefirstlineloadstheinit_disp ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
author-avatar
手机用户2502939381
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有