,,Vue响应式系统的原理详解

,,Vue响应式系统的原理详解

本文主要为大家介绍Vue响应式系统的原理,有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。

目录

Vue Vue响应式系统的基本原理1。查看Object.defineProperty 2的用法。实战1。使用Object.defineProperty监视人员的年龄属性3。数据代理4。在虚拟环境中实施响应式系统的思路综述

1.数据代理在1。Vue:

2.2中数据代理的好处。Vue:

3.基本原则:

4.在4.vue中实现响应的想法

vue响应式系统的基本原理

当我们使用vue时,我们可以操纵数据来影响相应的视图。那么这个机制是如何实现的呢?

你想想,是不是就好像我们对数据的操作被“某个人”在监控?一旦我们对数据进行了更改,“有人”就能感觉到并帮助我们更新视图。

那么这个“某人”是谁呢?其实很常见,就是我们基础里学过Object.defineProperty。用它处理数据可以实现数据读取时“读取”的回调功能;当数据被写入时,回调函数“write”被执行。

接下来,我们将简单回顾一下这种方法的使用,然后通过几个实际例子带您了解这一原理。

1.回顾一下Object.defineProperty的用法

参数解释:

目标对象

Prop:要操作的目标对象的属性名。

描述符:描述符

传入对象返回值

描述符的一些属性,简单介绍几个属性。

可枚举,无论属性是否可枚举,默认为false。

可配置,属性是否可以修改或删除,默认为false。

可写,该属性是否可以修改,默认为false。

Get,获取属性的方法。

Set,设置属性的方法。

完整用法:

Object.defineProperty(对象,属性,描述符)

2.实战1:使用 Object.defineProperty 对 person的age属性 进行监听

踩坑

看看下面的代码。第一眼看上去,是不是感觉没什么不妥?

当有人读取人的年龄属性时,我返回人的年龄属性;当有人修改person的年龄属性时,我直接修改person.age的值

但是!男生女生们,运行之后,虽然没有错误,但是编译器还是不停疯狂地输出“@ @有人读取了年龄属性”。

这是为什么呢?想想吧。您可以在get函数中直接返回person.age。这算不算再看一遍人的年龄属性?这个时候程序就去一次又一次的执行age的get函数。

比如你要读取age,那么你告诉编译器我要输出person.age,好的,编译器查找person.age,发现它有get函数,于是执行get函数。此时,你以为你要得到它的值,但是get函数告诉编译器我要person.age,这样,就形成了一个无限循环!

那怎么解决呢?在get中不能直接返回person.age,那么如何获取这个属性的值呢?

:可以用变量代替吗?

我把person.age的值放在变量ageNumber中,当我想读取它的时候,我会返回ageNumber的值;若要修改,请修改ageNumber的值;

不是避免在get和set函数中使用person.age直接访问吗?

正确代码

这时候效果就完成了,可以边看边修改边监控。

3.数据代理

数据代理是什么意思?

答:简单解释,就是通过一个对象代理对另一个对象中的属性进行操作(读/写)。

有点抽象,对吧?用下面几个小例子来解释一下。

当教师要查看或修改学生成绩时,可以直接对教师对象进行操作,而不是直接对学生对象进行操作。

也就是上面我要说明的是,学生对象中score属性的操作(读/写)是由教师对象来表示的。

4.vue中实现响应式思路

对vue2有一些基础知识的同学应该知道,vue中data() {}定义的所有数据都会挂载到vm对象上。然后我们通过这个对数据进行操作。数据名,对吧?

这是否等同于上面小例子中的场景?这是vm对象的操作(读/写),它充当您定义的数据对象中属性的代理。

再举一个例子,充分认识vue的响应式原理。

将数据对象中的所有属性交给vm对象进行代理(让vm控制数据对象中属性的(读/写)操作)。当数据改变时,相应的视图可以被更新。

摘要

1.数据代理在1。Vue:

vm对象用于代理数据对象中属性的操作(读/写)。

2.2中数据代理的好处。Vue:

在数据中操作数据更方便。

3.基本原则:

通过Object.defineProperty()将数据对象中的所有属性添加到vm中。

为添加到vm的每个属性指定一个getter/setter。

在getter/setter中操作(读/写)数据中的相应属性。

4.vue中实现响应式思路

不使用数据代理,直接将数据分配装载到虚拟机。

1.下图所示的方法是为数据对象设置get和set的通用方法。

2.当创建一个新的Vue时,用户传入的数据对象将直接挂载到Vue实例上。

然后监视Vue实例之上的数据对象(反应式处理)。

本文到此为止。希望能帮到你,也希望你能多关注我们的更多内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: