# react 虚拟 DOM 与 真实 DOM

88 阅读2分钟

react 虚拟 DOM 与 真实 DOM

上一篇博文我们介绍了 jsx 创建 DOM 的好处,那有一个问题啊,jsx 创建的虚拟 dom 究竟是个啥玩意儿啊? 这篇博文来了解一下。

虚拟 DOM

想知道 jsx 创建的虚拟 dom 究竟是什么,其实很简单,有个相当流弊的工具来帮助我们探其真身!

对了,就是 console.log(), 啊哈哈哈哈哈!

我们直接打印一下创建的虚拟 dom 不就可以了嘛!

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>虚拟DOM</title>
</head>

<body>

    <!-- 准备好一个容器 -->
    <div id="app"></div>
    <!-- 引入react核心库 -->
    <script type="text/javascript" src="../js/react.development.js"></script>
    <!-- 引入react-dom 用于支持 react 操作 dom -->
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <!-- 引入 label,用于将 jsx 转化为 js -->
    <script type="text/javascript" src="../js/babel.min.js"></script>

    <!-- 此处必须写 text/babel -->
    <script type="text/babel">
        // 1. 创建虚拟dom
        const VDOM = ( // 此处一定不要写双引号,因为不是字符串。
            <h1 id="user">
                <span>我是𝒆𝒅.</span>
            </h1>)  
        // 2. 渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById("app"))
        // 打印查看虚拟 dom
        console.log("虚拟DOM---> ", VDOM)
    </script>

</body>

</html>

保存刷新,我们看一下打印的结果:

在这里插入图片描述

通过打印的结果我们可以看到,这个虚拟 dom 就是 js 的一个一般对象,既不是数组,也不是函数。

如果不放心,我们可以直接打印一下他的类型:

    <!-- 此处必须写 text/babel -->
    <script type="text/babel">
        // 1. 创建虚拟dom
        const VDOM = ( // 此处一定不要写双引号,因为不是字符串。
            <h1 id="user">
                <span>我是𝒆𝒅.</span>
            </h1>)  
        // 2. 渲染虚拟dom到页面
        ReactDOM.render(VDOM, document.getElementById("app"))
        // 打印查看虚拟 dom
        console.log("虚拟DOM---> ", VDOM)
        console.log("虚拟DOM类型---> ", typeof VDOM)
        console.log("虚拟DOM类型---> ", VDOM instanceof Object)
    </script>

保存刷新,看一下打印的结果。 在这里插入图片描述 好了,现在确定了,这个 jsx 创建的虚拟 dom 不是什么牛逼的东西,就是一个简单的、普通的、一半的 js 对象。

真实 DOM

上面我们说了一下虚拟 dom,那这玩意儿和 真实dom 有啥不一样呢?很简单嘛,输出一下真实dom 然后比对一下子就可以啦!加上这两行,打印一下真实 dom 是啥样的就行了 !

        // 获取一个真实 dom
        const TDOM = document.getElementById('app')
        console.log("真实DOM---> ", TDOM)

打个断点看一下各个 dom 的属性,因为不打断点直接执行,控制台会自动解析出标签,保存刷新看结果。

在这里插入图片描述 在这里插入图片描述

可以看到 虚拟 dom 就几个属性,但是 真实 dom 有好多好多属性呢!

本博文总结

关于虚拟 DOM:

  • 本质是一个 Object 类型的对象,也就是一般对象。
  • 虚拟 dom 比较“轻”,真实 dom 比较“重”,因为虚拟 dom 是 react 内部自己使用,不需要真实 dom 那么多的属性。
  • 虚拟 dom 最终会被 react 转化成 真实 dom 渲染在页面上。

好了,今天的内容就到这里了吧,也没啥可以在说的了,就简单了解一下真实 dom 和虚拟 dom 的区别。

OK,结束了,拜了个拜!下篇博文见!

在这里插入图片描述

【本博文相关代码资料】: 我是𝒆𝒅. 的 gitee