1_认识vue;2_劫持原理;3_指令+key;4_key的作用

本文介绍了Vue3.0的劫持原理,探讨了Vue中的指令和key的使用,如v-cloak、v-pre以及diff算法在更新DOM时如何比较节点。key在Vue中用于标识唯一性,避免因元素复用导致的问题。同时,文章还提到了data和methods的区别,data中的属性会被劫持,而methods中的方法确保了this的指向。

1_认识vue

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

2_劫持原理

在这里插入图片描述
在这里插入图片描述
vue3.0采用的方式
在这里插入图片描述

3_指令+key

属性选择器,vue渲染完成之后,会把v-cloak移除掉
在这里插入图片描述
加上v-pre之后vue解析的时候就不看了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
diff算法先会虚拟dom进行比较,先比较key是否一样,一样的话直接复用,不一样再比较标签往下依次判断
在这里插入图片描述
在这里插入图片描述
用index做key,因为index总是从0到length-1,如果删除了一项,有可能出现删除项key和元素key重复的问题,出现元素复用出现一些问题
v-once只渲染一次

4_key的作用

data中的属性都会被劫持,methods中的方法不会,最后都会被挂载到vm实例上,data中也能写函数,也会正常执行,如果跟methods中的方法名重复会报错,但是data中定义的函数体内的this指向不确定,因为他先会被劫持再挂载,methods中的函数中this指向vm实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Vue2 中,`target.__ob__.value` 是响应式系统中一个关键的属性,用于访问被 `Object.defineProperty` 劫持的对象的原始值。具体来说,`__ob__` 是 Vue 在数据对象上添加的一个属性,用来存储一个 `Observer` 实例。这个 `Observer` 实例负责将数据对象转换为响应式的,并且包含了一些必要的属性和方法来管理数据的依赖收集和更新通知。 `target.__ob__.value` 通常指向原始的数据对象,即 `target` 本身。这是因为在 Vue 的响应式处理过程中,`Observer` 实例会被附加到原始数据对象上,并且 `__ob__.value` 被设置为指向原始数据对象,以便在需要时能够访问到它。 ### 数据劫持与响应式处理 在 Vue2 中,数据的响应式处理是通过 `Object.defineProperty` 实现的。当一个数据对象被传入 Vue 实例的 `data` 选项时,Vue 会遍历该对象的所有属性,并使用 `Object.defineProperty` 对它们进行重新定义。这样做的目的是在属性被访问时收集依赖,在属性被修改时触发更新。 在这个过程中,Vue 会为每个被观测的对象添加一个 `__ob__` 属性,该属性是一个 `Observer` 实例。`Observer` 类负责管理数据对象的响应式特性,包括依赖的收集和更新的触发。`__ob__.value` 则用于保存原始的数据对象,以便在需要时能够访问到它。 ### Vue.set 的作用 对于 Vue2 中的 `Vue.set()` 方法,它提供了一种机制,使得我们可以在已经创建的 Vue 实例上添加新的响应式属性。由于 Vue 无法检测到对象属性的添加或删除,因此直接给对象添加新属性不会触发视图的更新。为了实现这一点,可以使用 `Vue.set()` 方法来确保新添加的属性也是响应式的。 ```javascript Vue.set(target, key, value); ``` - `target`: 目标对象,通常是 Vue 实例上的一个数据对象。 - `key`: 要添加的新属性的名称。 - `value`: 新属性的值。 通过 `Vue.set()` 添加的属性会被正确地转换为响应式的,并且能够触发视图的更新。这背后的工作原理同样依赖于 `__ob__` 属性,因为 `Vue.set()` 会检查目标对象是否已经被观测,并利用 `Observer` 实例来确保新属性的响应式特性[^1]。 ### 依赖收集与更新通知 在 Vue2 的响应式系统中,`Dep` 类用于依赖收集,而 `Watcher` 类用于视图更新与依赖更新。当一个组件的模板中引用了某个数据属性时,Vue 会在该属性的 `getter` 中收集依赖,这个依赖通常是当前组件的渲染 `Watcher`。当数据属性发生变化时,`setter` 会通知 `Dep`,然后 `Dep` 会通知所有相关的 `Watcher` 进行更新[^3]。 ### 总结 `target.__ob__.value` 是 Vue2 响应式系统中用于访问原始数据对象的一个属性。它通过 `Observer` 实例来管理数据的响应式特性,确保数据的变化能够被正确地检测到并触发视图的更新。同时,`Vue.set()` 方法也是基于这一机制来实现新属性的响应式添加。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值