React的生命周期函数详解


import React,{Component} from "react";

import SonApp from './sonApp'



class App extends Component{

    state={

		hobby:'爱吃很多好吃的'

    }



    // 是否要更新数据,这里返回true才会更新数据

    shouldComponentUpdate(nextProps,nextState){

        console.log("app.js第一步:这里判断是否要更新数据")

        console.log(nextProps)  // 父组件传给子组件的值,这里没有会显示空

        console.log(nextState)  // 数据更新后的值

        return true             // 返回true,确认更新

    }



    // 更新数据时触发的生命周期函数

    componentDidUpdate(){

        console.log("app.js第四步:组件更新完成")

    }



    // 完成渲染即将被挂载在DOM中, 这会已经生成了新的DOM节点了,不过还有修改文档,你可以在这里去获取更新之前的文档

    getSnapshotBeforeUpdate(){

        console.log("app.js第四步:完成渲染即将被挂载在DOM中")

        return 11

    }



    setData = ()=>{

        this.setState({hobby:"你是猪吗???"})

    }



    render(){

        console.log("app.js第三步:数据渲染render")

        return (

                <div>

                    {this.state.hobby}

                    <button onClick={this.setData}>点击更新数据</button>

                    <SonApp value={this.state.hobby}></SonApp>

                </div>

        )

    };

}



export default App;



浏览器反馈

在这里插入图片描述

2. 挂载阶段


constructor(props)

类的构造函数,也是组件初始化函数,一般情况下,我们会在这个阶段做一些初始化的工作

  • 初始化 state

  • 处理事件绑定函数的 this(之前有过一篇React踩坑系列,其中的this指向就有用的这里去处理)


    constructor(props){

        super(props)

        console.log("第一步:构造函数")

    }



render

组件生命周期渲染阶段执行的函数


    render(){

        console.log("第三步:渲染render")

        return (

                <div>

                    我喜欢吃各种口味的广式月饼,除了水果味的!!!

                </div>

        )

    };



static getDerivedStateFromProps(props, state)

该方法会在 render 方法之前调用,无论是挂载阶段还是更新阶段,它的存在只有一个目的:让组件在 props 变化时更新 state


    static getDerivedStateFromProps(props, state){

        console.log(props); // 接收到父组件传递过来的新的props

        console.log(state); // 组件当前的数据

        console.log("第二步:组件将要挂载");

        return state;   // 用户需要在这个函数中返回一个对象, 它将作为 setState() 中的 Updater 更新组件.

    }



componentDidMount()

在组件挂载后调用


    componentDidMount(){

        console.log("第四步:组件挂载完成")

    }



整体代码组成组件加载阶段


import React,{Component} from "react";



class App extends Component{

    constructor(props){

        super(props)

        console.log("第一步:构造函数")

    }

    state={

		hobby:'爱吃很多好吃的'

    }



    /**

     * 每次组件渲染前被调用,该方法会在 render 方法之前调用,无论是挂载阶段还是更新阶段,

     * 它的存在只有一个目的:让组件在 props 变化时更新 state

     * */ 

    static getDerivedStateFromProps(props, state){

        console.log(props); // 接收到父组件传递过来的新的props

        console.log(state); // 组件当前的数据

        console.log("第二步:组件将要挂载");

        return state;   // 用户需要在这个函数中返回一个对象, 它将作为 setState() 中的 Updater 更新组件.

    }



    // 组件挂在完成时触发的生命周期函数

    componentDidMount(){

        console.log("第四步:组件挂载完成")

    }



    render(){

        console.log("第三步:渲染render")

        return (

                <div>

                    我喜欢吃各种口味的广式月饼,除了水果味的!!!

                </div>

        )

    };

}



export default App;



浏览器反馈

在这里插入图片描述

3. 销毁阶段


componentWillUnmount()

该方法会在组件卸载及销毁前调用,我们可以在这里做一些清理工作,如:组件内的定时器、未完成的请求等


    componentWillUnmount(){

        console.log("sonApp.js组件被销毁")

    }



完整版销毁组件代码


父组件

import React,{Component} from "react";

import SonApp from './sonApp'



class App extends Component{

    state={

		hobby:true

    }



    setData = ()=>{
#### 算法刷题

大厂面试还是很注重算法题的,尤其是字节跳动,算法是问的比较多的,关于算法,推荐《LeetCode》和《算法的乐趣》,这两本我也有电子版,字节跳动、阿里、美团等大厂面试题(含答案+解析)、学习笔记、Xmind思维导图均可以分享给大家学习。



![](https://img-blog.csdnimg.cn/img_convert/c582a01373152bb4cd38bc6ad5cc8027.png)



**写在最后**

**最后,对所以做Java的朋友提几点建议,也是我的个人心得:**

1.  疯狂编程

2.  学习效果可视化

3.  写博客
4.  阅读优秀代码
5.  心态调整


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/740128.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

快速排序的实现(3种)

目录 0.快速排序1.Hoare版本1.1基本思想1.2算法描述1.3画图解释1.4问题&#xff1f;1.5代码实现 2.挖坑法2.1算法描述2.2画图解释2.3代码实现 3.先后指针法3.1算法描述3.2画图解释3.3代码实现 4.优化4.1优化方法4.2优化代码 5.非递归实现快排5.1算法描述 0.快速排序 1.时间复杂…

AGV选型要点及步骤,保证企业选择的AGV小车更实用

AGV AGV小车作为智能化物流仓储不可或缺的工具&#xff0c;在制造业得到了广泛的应用&#xff0c;市场需求呈现出井喷式增长。但是AGV市场还存在着很多问题&#xff0c;制造企业在产品选型时往往缺乏正确的引导。 AGV智能仓储 毫无疑问,我们的自动化物流系统已离不开AGV小车了,…

Spring Boot + Vue 全栈开发,都需要哪些前端知识?

Node.js默认安装的npm包和工具的位置&#xff1a;Node.js目录\node_modules 在这个目录下你可以看见 npm目录&#xff0c;npm本身就是被NPM包管理器管理的一个工具&#xff0c;说明 Node.js已经集成了npm工具 #在命令提示符输入 npm -v 可查看当前npm版本 npm -v 二、使用n…

【Android】Android Studio 使用Kotlin写代码时代码提示残缺问题解决

问题描述 Android Studio升级之后&#xff0c;从Android Studio 4.2升级到Android Studio Arctic Fox版本&#xff0c;因为项目比较老&#xff0c;使用的Gradle 版本是3.1.3&#xff0c;这个版本的Android Studio最低支持Gradle 3.1版本&#xff0c;应该算是比较合适的版本。 …

天猫超市卡有什么用?

有时候不知道在网上买什么的时候&#xff0c;恰好就会收到一些猫超卡、京东卡类的礼物 这真是让人苦恼 还好收卡云一直在收这些礼品卡券啊&#xff0c;不然我的大部分礼品卡最后只有过期的份了&#xff01;

SpringBoot异常处理机制之自定义404、500错误提示页面 - 518篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

c++ 正则匹配得使用

标头&#xff1a;#include <regex> 相关函数&#xff1a; regex_match regex_replace regex_search 名称描述regex_match测试正则表达式是否与整个目标字符串相完全匹配。regex_replace替换匹配正则表达式。regex_search搜索正则表达式匹配项。 1. regex_search 成功搜…

ctr/cvr预估之WideDeep模型

ctr/cvr预估之Wide&Deep模型 在探索点击率&#xff08;CTR&#xff09;和转化率&#xff08;CVR&#xff09;预估的领域中&#xff0c;我们始终追求的是一种既能捕获数据中的线性关系&#xff0c;又能发现复杂模式的模型。因子分解机&#xff08;Factorization Machines, …

张量在人工智能中的解释?

张量在人工智能中的解释&#xff1f; 张量是一种多维数组&#xff0c;它可以看作是向量和矩阵的推广。在人工智能领域&#xff0c;张量被用作数据的基本表示形式&#xff0c;尤其在深度学习中扮演着核心角色。张量的多维性允许它们表示复杂的数据结构和关系&#xff0c;而其可…

iOS之如何创建.framework静态库

番外&#xff1a;想要查看如何创建.a静态库可前往看我iOS之如何创建.a静态库-CSDN博客这篇文章。 一、创建framework项目 创建framework工程要选择iOS --> Cocoa Touch Framework输入项目名称PrintFramework也是编译生成的framework的名称。framework的名称也可以以后在项目…

不翻墙安装yolov8环境下的RT-DETR并实现PCB表面缺陷检测

目录 一、新建conda环境二、安装yolov8环境1.克隆安装包2.安装依赖包3.测试模型 任务2&#xff1a;基于RT-DETR实现PKU-PCB表面缺陷检测数据准备 数据增强测试 总结 一、新建conda环境 创建并激活conda环境&#xff1a; 在conda创建一个名为yolov8的新环境&#xff0c;并在其中…

React尚硅谷115-126(setState、Hooks、Fragment、context、组件优化、renderprops

122&#xff0c;context 只能用value传&#xff0c;可以传对象&#xff0c;字符串 一种组件间通信方式, 常用于【祖组件】与【后代组件】间通信 使用&#xff1a; 创建Context容器对象&#xff1a; const XxxContext React.createContext() 渲染子组时&#xff0c;外面包…

SpringBoot的Web开发支持【超详细【一篇搞定】果断收藏系列】

Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println(“MyInterceptor.afterCompletion”); } } 使用Java的形式配置拦截器的拦截路径 在WebMvcConfig…

零门槛用AI,302.AI让人工智能变得简单易用

当下人工智能火爆&#xff0c;提到AI&#xff0c;几乎每个人都能说上几句&#xff0c;但是你真的会使用AI吗&#xff1f; 当涉及到如何实际使用AI时&#xff0c;许多人可能会觉得它太过高深莫测&#xff0c;从而产生一种距离感&#xff0c;不知如何开始。我和大家也一样&#x…

Apple - Game Center Programming Guide

本文翻译整理自&#xff1a;Game Center Programming Guide&#xff08; Updated: 2016-06-13 https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/GameKit_Guide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40008304 文章…

jemeter基本使用

后端关验签&#xff0c;设置请求头编码和token 配置编码和token

【分布式事务】Seata AT实战

目录 Seata 介绍 Seata 术语 Seata AT 模式 介绍 实战&#xff08;nacos注册中心&#xff0c;db存储&#xff09; 部署 Seata 实现 RM 实现 TM 可能遇到的问题 1. Seata 部署成功&#xff0c;服务启动成功&#xff0c;全局事务不生效 2. 服务启动报错 can not get …

c++分隔字符串

可以使用getline函数。 有两个版本&#xff1a; 至于为什么可以使用getline函数返回值作为while的判断条件&#xff0c;cprimer中表述如下&#xff1a;

[MySql]两阶段提交

文章目录 什么是binlog使用binlog进行恢复的流程 什么是redolog缓冲池redologredolog结构 两阶段提交 什么是binlog binlog是二进制格式的文件&#xff0c;用于记录用户对数据库的修改&#xff0c;可以作用于主从复制过程中数据同步以及基于时间点的恢复&#xff08;PITR&…

Docker(六)-本地镜像发布到私有库

1.下载镜像Docker Registry 用于搭建私人版本Docker Hub docker pull registry2.运行私有库Registry 运行私有库Registry&#xff0c;相当于本地有个私有Docker hubdocker run -d -p hostPort:containerPort -v 【宿主机目录】:【容器目录】 --privilegedtrue 【私有库镜像】…