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

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 【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、局部进行重绘



相关文章
|
JavaScript 前端开发 算法
react中虚拟dom和diff算法
在React中,虚拟DOM(Virtual DOM)和Diff算法是两个核心概念,它们共同工作以提高应用的性能和效率。
324 4
|
JavaScript 前端开发 算法
React技术栈-虚拟DOM和DOM diff算法
这篇文章介绍了React技术栈中的虚拟DOM和DOM diff算法,并通过一个实际案例展示了如何使用React组件和状态管理来实现动态更新UI。
339 2
|
XML 编解码 JavaScript
DOM(文档对象模型)和 BOM(浏览器对象模型)
【10月更文挑战第19天】在前端开发中,理解 DOM(文档对象模型)和 BOM(浏览器对象模型)是至关重要的。它们是 Web 开发的基础,为我们提供了与网页文档和浏览器进行交互的能力。
1970 62
|
XML JavaScript 前端开发
学习react基础(1)_虚拟dom、diff算法、函数和class创建组件
本文介绍了React的核心概念,包括虚拟DOM、Diff算法以及如何通过函数和类创建React组件。
297 3
|
机器学习/深度学习 JavaScript 算法
面试中的网红虚拟DOM,你知多少呢?深入解读diff算法
该文章深入探讨了虚拟DOM的概念及其diff算法,解释了虚拟DOM如何最小化实际DOM的更新,以此提升web应用的性能,并详细分析了diff算法的实现机制。
|
XML JavaScript 测试技术
Web自动化测试框架(基础篇)--HTML页面元素和DOM对象
本文为Web自动化测试入门指南,介绍了HTML页面元素和DOM对象的基础知识,以及如何使用Python中的Selenium WebDriver进行元素定位、操作和等待机制,旨在帮助初学者理解Web自动化测试中的关键概念和操作技巧。
338 1
|
JavaScript 前端开发 API
前端开发者的救赎:揭秘JQ对象与DOM元素的神秘转换术
【8月更文挑战第23天】在Web前端开发领域,jQuery(简称JQ)作为一款流行的JavaScript库,极大简化了HTML文档遍历、事件处理、动画及Ajax交互等操作。理解和掌握jQuery对象与DOM元素间的转换至关重要。
223 0
|
JavaScript 前端开发
js之DOM 文档对象模型
js之DOM 文档对象模型
|
JavaScript
DOM 节点列表长度(Node List Length)
DOM 节点列表长度(Node List Length)
|
XML JavaScript 数据格式
XML DOM 遍历节点树
XML DOM 遍历节点树