看完后完全了解 Vue 2.0 和 Vue 3.0 的区别

1.数据的双向绑定

Vue2.0使用Object.defineProperty

原理:通过使用 Object.defineProperty 来劫持对象属性的 geter 和 seter 操作,当数据发生改变发出通知

代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="yingaxiang" content="width=device-width, initial-scale=1.0">
 6     <title>vue2.x数据双向绑定</title>
 7 </head>
 8 <body>
 9     <div>
10         <input type="text" id="input">
11         <span id="text"></span>
12     </div>
13 </body>
14 </html>
15 <script>
16     var obj = {};
17     Object.defineProperty(obj, 'prop', {
18         get: function () {
19             return val;
20         },
21         set: function (newVal) {
22             val = newVal;
23             document.getElementById('text').innerHTML = val;
24         }
25     });
26     document.addEventListener('keyup', function (e) {
27         obj.prop = e.target.value;
28     });
29 </script>

Vue 3.0使用ES6的新特性porxy

原理:通过ES6的新特性proxy来劫持数据,当数据改变时发出通知

代码:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="yingaxiang" content="width=device-width, initial-scale=1.0">
 6     <title>vue3.0数据双向绑定</title>
 7 </head>
 8 <body>
 9     <div>
10         <input type="text" id="input">
11         <span id="text"></span>
12     </div>
13 </body>
14 </html>
15 <script>
16     var obj = {};
17     var obj1 = new Proxy(obj, {
18         // target就是第一个参数obj, receive就是返回的obj(返回的proxy对象)
19         get: function (target, key, receive) {
20             // 返回该属性值
21             return target[key];
22         },
23         set: function (target, key, newVal, receive) {
24             // 执行赋值操作
25             target[key] = newVal;
26             document.getElementById('text').innerHTML = target[key];
27         }
28     })
29     document.addEventListener('keyup', function (e) {
30         obj1[0] = e.target.value;
31     });
32 </script>

总结:

Vue2.x版本中的双向绑定不能检测到下标的变化
proxy可以劫持整个对象,并返回一个新对象

2. vue3.0 diff 方法优化

  • vue2 中的虚拟dom是进行全量的对比
  • vue3 中新增了静态标记(pathFlag)

    在创建dom的时候diff算法的更新 会根据Dom中的内容会不会发生变化,添加动态的标记

相关推荐
<p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310007118712.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <span style="color:#FFFF00;background-color:#FF0000;font-size:24px;"><strong>走在技术前沿之 Vue3.0 新特性全面解析。 <strong>全网抢先,做首批 Vue 3.0 开发者!!!</strong></strong></span> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>课程内容包含:<br /> </strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>1.Vue 3.0之版本大更新</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>2.新特性重点关注</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>3.composition-api(组合式API)</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>4.初始化Vue 3.0项目</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>5.setup函数</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>6.响应式系统API(reactive、ref、computed、watch等)</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>7.响应式系统工具集(unref、toRef、toRefs、isRef、isProxy等)<br /> </strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>8.生命周期钩子函数变化</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>9.依赖注入</strong></span> </p> <p style="font-size:16px;"> <span style="font-size:20px;color:#595959;"><strong>10.模板refs</strong></span> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;">教学全程采用笔记+代码案例形式讲解,通俗易懂!!!</span></strong> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310011021534.png" alt="" /> </p> <p style="font-size:16px;"> <br /> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310011101181.png" alt="" /> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310011183568.png" alt="" /> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310011275518.png" alt="" /> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <span style="color:#C00000;"><strong><span><strong>补充:想学习 Vue 2.x 同学请移步以下地址</strong></span></strong><strong><span><strong></strong></span></strong></span> </p> <p style="font-size:16px;"> <span style="color:#C00000;"><strong><span style="color:#FF0000;"><strong><a href="https://edu.51cto.com/course/10543.html"></a><a href="https://edu.csdn.net/course/detail/7906">https://edu.csdn.net/course/detail/7906</a> (</strong></span></strong><span style="color:#FF0000;"><strong><span></span></strong><strong><span></span></strong><strong><span><strong>Vue.js 2.0之全家桶系列视频课程)</strong></span></strong></span></span> </p> <p style="font-size:16px;"> <span style="color:#FF0000;"><strong><span><strong><span style="font-size:18px;"> </span></strong></span></strong></span> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"></span></strong> </p> <p style="font-size:16px;"> <span style="font-size:18px;"><strong>讲师介绍</strong></span> </p> <p style="font-size:16px;"> <img src="https://img-bss.csdnimg.cn/202005310012193677.jpg" alt="" /> </p> <p style="font-size:16px;"> <strong><span style="color:#FF0000;"><br /> </span></strong> </p>
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页