位置: IT常识 - 正文

React生命周期详解(react生命周期分为两类)

编辑:rootadmin
React生命周期详解 前言

推荐整理分享React生命周期详解(react生命周期分为两类),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react生命周期执行顺序,react生命周期分为两类,react的生命周期函数,react生命周期shouldcomponentupdate,react生命周期shouldcomponentupdate,react生命周期setstate,react生命周期分为两类,react生命周期执行顺序,内容如对您有帮助,希望把文章链接给更多的朋友!

        react生命周期在各个阶段的执行顺序是有所差异的,接下来我们将详细解析react在各个阶段生命周期的执行顺序,以及各个生命周期在组件中充当的作用(以下生命周期指的是react16之后的版本)

组件挂载时

当组件实例被创建并插入DOM时,其生命周期调用顺序如下:

constructor()static getDerivedStateFromProps()render()componentDidMount()组件更新时

当组件的props或state发生变化时会触发更新。组件更新的生命周期调用顺序如下:

static getDerivedStateFromProps()shouldComponentUpdate()render()getSnapshotBeforeUpdate()componentDidUpdate()组件卸载时

当组件从DOM中移除时会调用如下方法

componentWillUnmount()错误处理

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

static getDerivedStateFromProps()componentDidCatch()常用生命周期1.render()

render()方法时class组件中唯一必须要实现的方法,当render被调用时,它会检查this.props和this.state的变化并返回下类型:

React元素:通常通过jsx创建。比如,<div />会被渲染为DOM节点,<MyComponent />会被React渲染成为自定义组件,武林是<div/>还是<MyComponent/>均为React元素。数组或fragments:使得render方法可以返回多个元素,想了解更加详细,参见fragments文档:Fragments – ReactPortals:可以渲染子节点到不同的DOM子树中,字符串或者数值类型:他们在DOM中会被渲染为文本节点布尔类型或null:什么都不渲染(主要用于支持返回test &&<Child />默认,其中test为布尔类型)

render()函数应该为纯函数,这意味着不在修改组件state情况下,每次调用时都返回相同的结果,并且它不会直接与浏览器交互。

如需与浏览器进行交互,请在componentDidMount()或者其他生命周期方法中执行你的操作,保持render()为纯函数,可以使组件更容易思考

注意:shouldComponentUpdate()返回false,则不会调用render()

 2.constructor()构造函数constructor(props)

如果不初始化state或不进行方法绑定,则不需要为React组件实现构造函数

在React组件挂在之前,会调用它的构造函数。在为React.Component子类实现构造函数时,应在其他语句之前调用super(props)。斗则,this.props在构造函数中可能会出现未定义的bug

通常,在React中,构造函数仅用于以下两种情况:

通过给this.state赋值对象来初始化内部state为事件处理函数绑定实例React生命周期详解(react生命周期分为两类)

在constructor()函数中不要调用setState()方法,如果你的组件需要使用内部state,请直接在构造函数中为this.state赋值初始化state:

constructor(props) { super(props); // 不要在这里调用 this.setState() this.state = { counter: 0 }; this.handleClick = this.handleClick.bind(this);}

只能在构造函数中直接为this.state赋值,如需要在其他方法中赋值,应该使用this.setState()替代

要避免在构造函数中引入任何副作用或订阅,如遇场景,请将对应的擦欧总放置在componentDidMount中

注意:避免将props的值复制给state!这是一个常见的错误:

constructor(props) { super(props); // 不要这样做 this.state = { color: props.color };}

如此做毫无必要(你可以直接使用this.props.color),同事还产生了bug(更新prop中的color时,并不影响state)

 3.componentDidMount()

componentDidMount()会在组件挂在(插入DOM树中)立即调用。依赖DOM节点的初始化应该放在这里。如需通过网络请求获取数据,此处实例化请求的好地方。

这个方法是比较适合添加订阅的方法,如果添加了订阅,请不要忘记在componentWillUnmount中进行取消

你可以在componentDidMount()里直接调用setState()。它将触发额外渲染,但此渲染会发生在浏览器更新屏幕之前。如此保证了即使在render()两次调用的情况下,用户也不会看到中间状态。

4.componentDidUpdate()componentDidUpdate(prevProps,prevState,snapshot)//prevProps表示之前的prop

componentDidUpdate()会在更新后立即被调用,首次渲染不会执行此方法

当组件更新后,可以在此处对DOM进行操作。如果你对更新前后的prop进行了比较,也可以渲染在此处进行网络请求(例如,当props未发生变化时,则不会执行网络请求)

componentDidUpdate(prevProps){ //典型用法(不要忘记比较props) if(this.props.userId!==prevProps.userId){ this.fetchDate(this.props.userId) }}

如果组件实现了getSnapshotBeforeUpdate()生命周期(不常用),则它的返回值将作为componentDidUpdate()的第三个参数“snapshot”参数传递,否则此参数将为undefined。

注意:如果shouldComponentUpdate()返回值未false,则不会调用componentDidUpdate()

 5.componentWillUnmount()

componentWillUnmount() 会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

componentWillUnmount() 中不应调用 setState(),因为该组件将永远不会重新渲染。组件实例卸载后,将永远不会再挂载它。

不常用的生命周期方法1.shouldComponentUpdate()shouldComponentUpdate(nextProps,nextState)

根据shouldComponentUpdate()的返回值,判断React组件的输出时否手当前state或props更改的影响,默认行为时state每次发生改变组件都会渲染,大部分情况下,你应该遵循默认行为。

当props或者state发生改变时,shouldComponentUpdate()会在渲染执行之前被调用。默认返回值未true,首次渲染或使用forceUpdate()时不会调用该方法。

此方法仅作为性能优化方式而存在,不要企图依靠此方法来阻止渲染,因为这可能会尝试bug。你应该考虑使用内置PrueComponent组件,而不是手动编写shouldComponentUpdate(),PureComponent会对props和state进行浅层比较,并减少跳过必要更新的可能性。

2.static getDerivedStateFromProps()3.getSnapshotBeforeUpdate()4.static getDerivedStateFromError()5.componentDidCatch()其他API

不同于上述

本文链接地址:https://www.jiuchutong.com/zhishi/299125.html 转载请保留说明!

上一篇:【前端修炼场】 — 这些标签你学会了么?快速拿下 “hr”(web前端修炼之道)

下一篇:浅析<router-view> v-slot事例(浅析中国式现代化的理论价值与现实意义)

  • “京东618”竟持续了一个月?促销为啥要这么久(京东618 20亿)

    “京东618”竟持续了一个月?促销为啥要这么久(京东618 20亿)

  • 2021qq年度数据报告在哪看(qq2020年度数据报告)

    2021qq年度数据报告在哪看(qq2020年度数据报告)

  • 华为手机已保存的wifi怎么看密码(华为手机已保存的网络怎么批量删除)

    华为手机已保存的wifi怎么看密码(华为手机已保存的网络怎么批量删除)

  • WPS怎么删除某一页(wps怎么删除某一页)

    WPS怎么删除某一页(wps怎么删除某一页)

  • 安卓语音备忘录在哪里(安卓语音备忘录下载)

    安卓语音备忘录在哪里(安卓语音备忘录下载)

  • 京东账号是用户名吗(京东账号是用户名还是手机号)

    京东账号是用户名吗(京东账号是用户名还是手机号)

  • 笔记本电脑返回键是哪个(笔记本电脑返回上一步)

    笔记本电脑返回键是哪个(笔记本电脑返回上一步)

  • 怎么删除字不删除下划线(怎样删字)

    怎么删除字不删除下划线(怎样删字)

  • 为什么有的抖音视频不能下载保存(为什么有的抖音号搜不到)

    为什么有的抖音视频不能下载保存(为什么有的抖音号搜不到)

  • 蓝牙键盘怎么充电(蓝牙键盘充一次电能用多久)

    蓝牙键盘怎么充电(蓝牙键盘充一次电能用多久)

  • 华为mate30prohd怎么关闭(华为mate30pro手机hd开关在哪里)

    华为mate30prohd怎么关闭(华为mate30pro手机hd开关在哪里)

  • word目录怎么做小点点(2016版word目录怎么做)

    word目录怎么做小点点(2016版word目录怎么做)

  • 苹果开发者账号是什么意思(苹果开发者账号注册)

    苹果开发者账号是什么意思(苹果开发者账号注册)

  • 微信仅聊天什么意思(微信仅聊天什么界面)

    微信仅聊天什么意思(微信仅聊天什么界面)

  • 爱奇艺怎么qq登录(爱奇艺怎么qq登录不了)

    爱奇艺怎么qq登录(爱奇艺怎么qq登录不了)

  • iphone11自带钢化膜吗(苹果11钢化屏)

    iphone11自带钢化膜吗(苹果11钢化屏)

  • 银行卡忘记预留手机号码怎么办(银行卡忘记预留手机号怎么查询)

    银行卡忘记预留手机号码怎么办(银行卡忘记预留手机号怎么查询)

  • 小米8耳机插上没反应(小米8耳机插上仍然是外音)

    小米8耳机插上没反应(小米8耳机插上仍然是外音)

  • 小米8充满电自动断电吗(小米充满电自动断电怎么设置)

    小米8充满电自动断电吗(小米充满电自动断电怎么设置)

  • 三星g6200是什么型号(三星g6200多少钱128g)

    三星g6200是什么型号(三星g6200多少钱128g)

  • 华为荣耀10支持遥控器吗(华为荣耀10支持5g吗)

    华为荣耀10支持遥控器吗(华为荣耀10支持5g吗)

  • 小米9怎么无线充电(小米9怎么无线充电充不上)

    小米9怎么无线充电(小米9怎么无线充电充不上)

  • 桃胶多少钱一斤(桃胶多少钱一斤正常)

    桃胶多少钱一斤(桃胶多少钱一斤正常)

  • Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版

    Navicat for MySQL 15 v15.0.27 中文企业正式版(附安装教程) 32/64位 破解版

  • 税收筹划分为哪几类
  • 城建税计税依据扣除增值税期末留抵
  • 债务重组计入哪项科目
  • 待抵扣进项税额分录
  • 个体工商户在哪注销营业执照
  • 个体工商户转让流程
  • 未开票收入已报税怎么办
  • 无偿捐赠设备该如何做账务处理呢?
  • 收到外商投入资金
  • 生物资产出售的账务处理
  • 付现金给别的公司是否可以开具发票呢?
  • 购进货物用于免征增值税项目
  • 地税保险单位编号是什么
  • 小规模纳税人转成一般纳税人条件
  • 未开票收入为负数如何写说明
  • 企业所得税审计的内容包括哪四个方面
  • 经营性租入的设备是资产吗
  • 申报是不是就是报税
  • 电子发票怎么作废操作流程视频
  • 购入商品入库时发现实收物多余应收数计入什么科目
  • 借贷在会计中的增和减
  • 劳务报酬和个人工资的区别
  • 政府高薪补贴
  • 物流公司运费的会计分录
  • 增量留底税额怎么进行确定
  • 纳税信用等级是自动判定吗
  • 苗木公司经营理念
  • 报销差旅费如何报税
  • 苹果手机录音配音乐怎么配
  • 委托检验报告能否作为处罚依据
  • 专票和普票都要交税吗
  • 建安混合销售能分开吗
  • 代理公司变更收费标准
  • php的laravel框架答辩
  • php实现简单论坛
  • 缴纳税款滞纳金会计处理
  • 垃圾处理费计入办公费用吗
  • 加工费能直接抵税吗
  • 发生售后维修领用材料分录
  • 抵账的多余款是什么科目
  • sql报数字溢出
  • 现金流量表存货增加额怎么算
  • 个人所得税汇算清缴怎么计算
  • sql server2019实例功能的选择
  • 纳税申报表期末未缴税额什么意思
  • 增值税是否计入在建工程
  • 固定资产大修理和更新改造的区别
  • 民间非营利组织会计制度及操作实务
  • 买下土地
  • 个人所得税要计入管理费用吗
  • 企业的营业税金怎么计算
  • 法人借给公司钱怎么写情况说明
  • 园林绿化公司的税率是多少
  • 结存材料实际成本计算公式
  • win10账户要求必须设置pin什么意思
  • win10屏幕自动变黄
  • 服务器远程超出配置范围
  • linux支持多种平台
  • windows10日历没有显示农历
  • linux find命令详解xargs
  • sm56hlpr.exe - sm56hlpr是什么进程
  • 如何知道自己的邮箱号
  • win7系统运行速度提升
  • perform.exe是什么进程
  • win7升级win8.1失败
  • win8小键盘怎么打开
  • win8怎么关闭电脑
  • linux如何关闭ipv6防火墙
  • 使用Python对MySQL数据操作
  • jquery easyui插件
  • 在全盘搜索以win
  • jquery对动态生成的进行操作
  • javascript的
  • maxlength属性设置为0
  • jquery.load()方法,刷新网页
  • 税务局把我拉入黑名单了怎么办
  • 税务举报可以撤销么?
  • 化妆品的消费税税率是多少
  • 卷烟批发环节的税率
  • 预约怎么缴费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设