【React】归纳篇(六)组件对象的生命周期 | 实例 | 虚拟DOM与DOM Diff算法

简介: 【React】归纳篇(六)组件对象的生命周期 | 实例 | 虚拟DOM与DOM Diff算法

组件对象的生命周期

组件对象的生命周期,指的是从组件对象产生到销毁的过程。

如下图所示:

图片.png

生命周期的回调函数:你定义了,你没有调用,但是这个函数却执行了。如render()函数。也称为生命周期的“钩子函数”。

透明度改变动画-实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <div id="test1"></div>
    <script src="https://cdn.bootcss.com/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.bootcss.com/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
    <script src="../js/prop-types.js"></script>
    <script type="text/babel">
    //1、定义类组件
    class Life extends  React.Component {
        constructor(props) {
            super(props);
            //初始化状态
            this.state = {
                opacity: 1
            }
            this.distroyComponent = this.distroyComponent.bind(this);
        }
        distroyComponent() {
            ReactDOM.unmountComponentAtNode(document.getElementById('test1'));
        }
        componentDidMount() {
            //启动循环定时器
            this.id_interval = setInterval(function(){
                console.log(1);
                let {opacity} = this.state;
                opacity -= 0.1;
                if(opacity<=0){
                    opacity = 1;
                }
                this.setState({opacity});
            }.bind(this),200)
        }
        componentWillUnmount() {//组件将被卸载前触发
            clearInterval(this.id_interval);
        }
        render() {
            const {opacity} = this.state;
            //{{对象}}与{JS代码}的区别
            return (
                <div>
                    <h2 style={{opacity:opacity}}>{this.props.msg}</h2>
                    <button onClick={this.distroyComponent}>Click Me to unmount the component</button>
                </div>
            )
        }
    }
    //2、渲染组件
    ReactDOM.render(<Life msg="组件对象的生命周期"/>,document.getElementById('test1'));
    </script>
</body>
</html>

小结下,组件对象的生命周期流程分为3个阶段:

1、第一次初始化渲染显示:ReactDOM.render() ,只会执行一次

  • constructor():创建对象初始化state
  • componentWillMount():将要插入回调
  • render():用于插入虚拟DOM回调
  • componentDidMount():已经插入回调

2、每次更新:state.this.setState() ,可以执行N次

  • componentWillUpdate() 将要更新回调
  • render() 更新,进行重新渲染
  • componentDidUpdate() 已经更新回调

3、移除组件:ReactDOM.unmountComponentAtNode(containerDOM),只会执行一次

  • componentWillUnmount():组件将要被移除回调

总的来说,有4个钩子比较重要:

  • render
  • componentDidMount
  • componentWillUnmount
  • componentWillReceiveProps

联想下 人的生命周期,从“出生-成长-死亡”,其实很类似这样的过程。

虚拟DOM与DOM Diff算法

DOM Diff 算法:只更新需要更新的部分。

虚拟DOM:在操作界面的过程中,界面是不会变的。

组件初始化过程:

  • 1、创建虚拟DOM树
  • 2、生成真实DOM树
  • 3、绘制界面显示

思考:更新时,如何做到最小化重绘:

  • 1、setState()更新状态
  • 2、重新创建虚拟DOM树
  • 3、新/旧树比较差异
  • 4、更新差异对应真实DOM
  • 5、局部进行重绘



相关文章
|
7月前
|
JavaScript 前端开发
react学习(3)创建虚拟dom的两种方式
react学习(3)创建虚拟dom的两种方式
195 67
|
6月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
272 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
6月前
|
JavaScript 前端开发 算法
React 虚拟 DOM 深度解析
【10月更文挑战第5天】本文深入解析了 React 虚拟 DOM 的工作原理,包括其基础概念、优点与缺点,以及 Diff 算法的关键点。同时,分享了常见问题及解决方法,并介绍了作者在代码/项目上的成就和经验,如大型电商平台的前端重构和开源贡献。
103 3
|
7月前
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
89 3
|
7月前
|
JavaScript 前端开发
react字符串转为dom标签,类似于Vue中的v-html
本文介绍了在React中将字符串转换为DOM标签的方法,类似于Vue中的`v-html`指令,通过使用`dangerouslySetInnerHTML`属性实现。
220 0
react字符串转为dom标签,类似于Vue中的v-html
|
22天前
|
存储 算法 调度
基于和声搜索优化算法的机器工作调度matlab仿真,输出甘特图
本程序基于和声搜索优化算法(Harmony Search, HS),实现机器工作调度的MATLAB仿真,输出甘特图展示调度结果。算法通过模拟音乐家即兴演奏寻找最佳和声的过程,优化任务在不同机器上的执行顺序,以最小化完成时间和最大化资源利用率为目标。程序适用于MATLAB 2022A版本,运行后无水印。核心参数包括和声记忆大小(HMS)等,适应度函数用于建模优化目标。附带完整代码与运行结果展示。
|
15天前
|
算法 安全 数据安全/隐私保护
基于AES的遥感图像加密算法matlab仿真
本程序基于MATLAB 2022a实现,采用AES算法对遥感图像进行加密与解密。主要步骤包括:将彩色图像灰度化并重置大小为256×256像素,通过AES的字节替换、行移位、列混合及轮密钥加等操作完成加密,随后进行解密并验证图像质量(如PSNR值)。实验结果展示了原图、加密图和解密图,分析了图像直方图、相关性及熵的变化,确保加密安全性与解密后图像质量。该方法适用于保护遥感图像中的敏感信息,在军事、环境监测等领域具有重要应用价值。
|
29天前
|
算法 数据可视化 BI
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
本程序基于免疫算法实现物流仓储点选址优化,并通过MATLAB 2022A仿真展示结果。核心代码包括收敛曲线绘制、最优派送路线规划及可视化。算法模拟生物免疫系统,通过多样性生成、亲和力评价、选择、克隆、变异和抑制机制,高效搜索最优解。解决了物流仓储点选址这一复杂多目标优化问题,显著提升物流效率与服务质量。附完整无水印运行结果图示。
基于免疫算法的最优物流仓储点选址方案MATLAB仿真
|
18天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
|
18天前
|
算法 定位技术 数据安全/隐私保护
基于遗传优化算法的多AGV栅格地图路径规划matlab仿真
本程序基于遗传优化算法实现多AGV栅格地图路径规划的MATLAB仿真(测试版本:MATLAB2022A)。支持单个及多个AGV路径规划,输出路径结果与收敛曲线。核心程序代码完整,无水印。算法适用于现代工业与物流场景,通过模拟自然进化机制(选择、交叉、变异)解决复杂环境下的路径优化问题,有效提升效率并避免碰撞。适合学习研究多AGV系统路径规划技术。
下一篇
oss创建bucket