详解React组件生命周期

浅殇忆流年 2019-02-19 16:35:24 ⋅ 682 阅读

原文作者:前端小知识库

原文链接:https://www.toutiao.com/a6658910963296633358

使用React开发已经有一段时间了(相比Vue使用的更多一些),对于其生命周期钩子函数也有了大致的了解,最近在开发中遇到了一些问题,查资料发现跟生命周期有关并且合理利用生命周期的钩子函数可以很好的解决,才觉得对React生命周期没有真正的理解透彻,于是今天好好的把生命周期中各个环节梳理了一遍,也算是一种提升吧,先看一张React生命周期的图,接下来再做详细的描述。


getDefaultProps

组件除了能接受父组件传递的props,还可以设置默认的属性值,使用dufaultProps

static dufaultProps = {
title: '标题'
}

getInitialState

组件有自身的状态,初始化时在constructor中通过this.state进行设置

constructor (props) {
super(props)
this.state({
show: true
})
}

componentWillMount

组件初始化时调用,整个生命周期只调用一次,此时可以进行this.setState更改状态的操作

render

React组件的核心方法,用来创建虚拟DOM,进行diff算法,创建或更新真实DOM树,此时不能更改状态

componentDidMount

组件挂载或更新完毕后调用,此时可以进行dom操作

componentWillReceiveProps(nextProps)

当传递给组件的props属性发生变化时调用,nextProps为更新过的props对象,在里面可以根据属性的变化,继而通过this.setState来改变组件的状态,通过this.props可以获取改变之前的props属性对象,这里调用更新状态是安全的,并不会触发额外的render调用

shouldComponentUpdate(nextProps, nextState)

此方法在props或state属性值发生变化时调用,在此处可以判断是否需要去更新组件,默认情况返回为true,我们在这里可以判断前后的props和state是否发生变化,如果发生变化则返回true更新组件,如果没有变化则返回false,不渲染更新,可以节省开销提高应用程序的性能,注意此处尽量不要更改组件的状态,忘记处理或处理不好会陷入死循环

componentWillUpdate(nextProps, nextState)

组件初始化时不调用,更新时调用,注意此处尽量不要更改组件的状态,忘记处理或处理不好会陷入死循环

render

这里render方法又写了一遍,只是因为组件的初始化和更新时都会调动此方法,备注一下

componentDidUpdate(nextProps, nextState)

组件初始化时不调用,更新完毕时调用

componentWillUnmount

组件被卸载时调用,在此处可以执行一些清理或重置的操作

---------------END----------------

后续的内容同样精彩

长按关注“IT实战联盟”哦




全部评论: 0

    我有话说:

    「开源资讯」React 17 正式版发布,构建用户界面的 JavaScript 库

    React简介 React(有时叫React.js或ReactJS)是 Facebook 推出的一个为数据提供渲染为 HTML 视图,用来构建用户界面的开源 JavaScript 库。 React

    「轻阅读」图解 Java 线程生命周期

    Java 线程生命周期中都包含哪些状态?生命周期中各个状态都是什么含义?

    React UI 库:React Suite 4.0.2 版本更新-多项Bug修复和新手入门

    React Suite 是一套 React 库,为后台产品而生。

    React Suite 4.8.6 版本更新,React UI 库

    React Suite 是一套 React 库,为后台产品而生,支持 Typescript,支持 RTL,支持服务端渲染。 文档: https://rsuitejs.com

    京东技术:京东风格的移动端Vue库NutUI2.0来啦

    移动端 Vue 库 NutUI 自发布以来受到了广泛的关注。据不完全统计,目前至少有30多个京东的 web 项目正在使用 NutUI 。

    React生命周期&原生通信,挺简单的

    由四张图引发的一系列事件。。。。

    「开源资讯」陌陌安全团队开源Java静态代码审计插

    陌陌安全本次开源的Java静态代码安全审计插,侧重于在编码过程中发现项目潜在的安全风险,并提供一键修复能力。 此插作为Java项目静态代码安全审计工具,侧重于在编码过程中发现项目潜在的安全风险

    阿里巴巴中间-Nacos 发布 v0.8.0 Pre-GA版本,安全稳定上生产

    服务注册和服务配置开源项目 Nacos 本周发布了 v0.8.0 Pre-GA 版本,作为开源项目生命周期中的里程碑版本之一

    IDEA 2020.3 更新 Kotlin 插

    IntelliJ IDEA 2020.3 稳定版已在 12 月初发布。现在 IDEA 2020.3 更新了其中的 Kotlin 插并更改 Kotlin 插发布周期。Kotlin 插

    极速后台框架 FastAdmin v1.2.0.20210125 新增插 API 文档生成

    FastAdmin 更新日志 v1.2.0.20210125_beta 新增自定义插API文档生成 新增登录和鉴权状态显示 新增自定义测试提交参数 优化安装脚本 优化cookie加密 修复系统

    用了近10年的 CentOS 6 生命周期结束

    CentOS 开发者邮件列表显示,CentOS 6 已于11月30日 EOL。   邮件还提到,CentOS 6.10 的目录将在12月第一周被迁移至 vault.centos.org。软件包仍在以下位置提供: http://vau...

    Kafka 慌了!这个中间,要火了?

    你知道吗?在消息中间的编年史上,RocketMQ可谓独当一面。作为Apache 顶级项目(TLP),Apache RocketMQ 是国内首个非 Hadoop 生态体系的顶级项目,开源至今被全球

    微服务架构实战篇(六):Spring boot2.x 集成阿里大鱼短信接口详解与Demo

    Spring boot2.x 集成阿里大鱼短信接口,发送短信验证码及短信接口详解

    京东技术:开发属于自己的插 | IDEA & Android Studio插开发指南

    是否曾经被ide重复繁琐的操作所困扰,又或者没有心仪的UI控而难受。那么请阅读这篇文章,掌握idea插的开发流程,开发属于自己的插,造福开源社区。

    京东技术:如何实现百万TPS?详解JMQ4的存储设计

    JMQ是京东中间团队自研的消息中间,诞生于2014年,服务京东近万个应用,2018年11.11大促期间的峰值流量超过5000亿条消息