React02-虚拟DOM

123 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

2、React的特点

  1. 声明式编码

  2. 组件化编码

  3. React Native 编写原生应用

  4. 高效(优秀的Diffing算法)

React高效的原因

  1. 使用虚拟(virtual)DOM, 不总是直接操作页面真实DOM。

  2. DOM Diffing算法, 最小化页面重绘。

​ 在修改页面的时候,通过与原来的虚拟DOM进行比较,只渲染已改变的内容,不会对页面整体进行改变。

​ 如页面有2000个标签,假使修改了一个标签,一个元素,如果不通过虚拟DOM的话,会重新渲染全部2000个标签,较耗费加载的时间,而且浏览器的任务量也会变多。但是如果通过虚拟DOM来操作的话,会进行比较,发现只有一个有变化的话,就只会改变那一个,而不是去改变所有的,因此虚拟DOM高效。

关于虚拟DOM:

1.本质是Object类型的对象(一般对象)

2.虚拟DOM比较“轻”,真实DOM比较“重”,因为虚拟DOM是React内部在用,无需真实DOM上那么多的属性。

3.虚拟DOM最终会被React转化为真实DOM,呈现在页面上。

虚拟DOM与真实DOM的区别

虚拟DOM是一个对象

真实DOM是一个节点

 <body>
     <!-- 准备一个容器 -->
     <div id="test"></div>
     <div id="demo"></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>
     <!-- 引入babel,用于将jsx转为js -->
     <script type="text/javascript" src="../js/babel.min.js"></script>
 ​
     <script type="text/babel">
         //1.创建虚拟DOM
         const VDOM = (
             <h1 id='title'>
                 <span>hello React</span>
             </h1>
         )
 ​
         //2.渲染虚拟DOM到页面
         ReactDOM.render(VDOM,document.getElementById('test'))
 ​
         const TDOM = document.getElementById('demo')
         console.log('虚拟DOM',VDOM)
         console.log('真实DOM',TDOM)
 ​
         // console.log(typeof VDOM);
         // console.log(VDOM instanceof Object);
     </script>
 </body>
简略详细
image.pngimage.png

假使使用原生JS编写react代码的结果

在创建虚拟DOM那一步的时候,需要不断的去写创造节点之类的,不如jsx方便,类似于html的写法,直接写标签内容

 <body>
     <!-- 准备好一个容器 -->
     <div id="test"></div>
 ​
     <!-- 引入react核心库 -->
     <script src="../js/react.development.js"></script>
     <!-- 引入react-dom,用于支持react操作DOM -->
     <script src="../js/react-dom.development.js"></script>
 ​
     <script type="text/javascript">
         //1.创建虚拟DOM
         const VDOM = React.createElement('h1',{id:'title'},React.createElement('span',{},'Hello,React'))
         //2.渲染虚拟DOM到页面
         ReactDOM.render(VDOM,document.getElementById('test'))
     </script>
 </body>