【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、局部进行重绘



相关文章
|
2月前
|
JavaScript 前端开发 算法
React技术栈-虚拟DOM和DOM diff算法
这篇文章介绍了React技术栈中的虚拟DOM和DOM diff算法,并通过一个实际案例展示了如何使用React组件和状态管理来实现动态更新UI。
42 2
|
1月前
|
JavaScript 前端开发 算法
真实DOM和虚拟DOM有哪些区别?
本文介绍了真实DOM和虚拟DOM的概念、使用方式、优势、劣势、使用场景、影响因素、开发效率和性能对比。真实DOM是浏览器提供的原生接口,直接操作简单直观,但频繁操作会导致性能损耗。虚拟DOM是真实DOM的抽象表示,通过比较差异减少DOM操作,适用于大规模数据变更和复杂交互的页面。开发者应根据具体需求选择合适的DOM操作方式,以提高页面性能和开发效率。
78 1
真实DOM和虚拟DOM有哪些区别?
|
2月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
85 1
|
3月前
|
移动开发 JavaScript 前端开发
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
这篇文章深入探讨了虚拟DOM的概念、必要性以及在Vue中的实现方式,解释了虚拟DOM如何作为真实DOM的轻量级抽象,通过优化DOM操作提高性能,并实现跨平台渲染的能力。
【Vue面试题二十二】、什么是虚拟DOM?如何实现一个虚拟DOM?说说你的思路
|
3月前
|
JavaScript 算法 前端开发
"揭秘虚拟DOM的神奇魔法:从零开始打造高效渲染引擎,颠覆你的DOM操作认知!"
【8月更文挑战第20天】虚拟DOM是一种优化技术,通过在内存中构建DOM树的轻量级副本,减少浏览器重排和重绘,提升性能。本文简要介绍了DOM及其重要性,并深入解释了虚拟DOM的概念。虚拟DOM通过模拟真实DOM结构,在内存中进行数据更新,仅将变动部分同步到实际DOM。文中还提供了一个简易虚拟DOM的实现方案,包括虚拟节点创建、渲染函数及一个基本的diff算法,用于比对新旧虚拟DOM并高效更新实际DOM。通过示例展示了如何构建和渲染一个简单的虚拟DOM。这有助于理解虚拟DOM的基本工作原理和技术细节。
53 4
|
3月前
|
JavaScript 前端开发 API
区分 DOM 与虚拟 DOM
【8月更文挑战第24天】
105 0
|
5月前
|
JavaScript 前端开发 算法
虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。
【6月更文挑战第27天】虚拟DOM是React的关键技术,它是个轻量的JS对象树,模拟实际DOM结构。当状态改变,React不直接修改DOM,而是先构建新的虚拟DOM树。通过 diff 算法比较新旧树,找到最小变更,仅更新必要部分,提高性能,避免频繁DOM操作。虚拟DOM还支持跨平台应用,如React Native。它优化了更新流程,简化开发,并提升了用户体验。
44 1
|
5月前
|
JavaScript 算法 前端开发
vue和react的diff算法的区别
vue和react的diff算法的区别
147 3
|
4月前
|
JavaScript
react18【系列实用教程】useRef —— 创建 ref 对象,获取 DOM (2024最新版)
react18【系列实用教程】useRef —— 创建 ref 对象,获取 DOM (2024最新版)
58 0
|
4月前
|
前端开发 JavaScript
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
react18【系列实用教程】useState —— 声明响应式变量(2024最新版)含useState 的异步更新机制,更新的合并,函数传参获取更新值,不同版本异步更新差异,更新对象和数组
263 0
下一篇
无影云桌面