vue如何实现数据控制视图

  介绍

这篇文章将为大家详细讲解有关vue如何实现数据控制视图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

这篇主要讲的就是vue很重要的一块知识点,双向数据绑定是如何实现的。一开始看这一块的内容的时候比较迷茫,迷茫在以下几个点:

<李>

这块内容该从哪边入手

<李>

数据变化是如何驱动视图层更新的

<李>

做题深化知识点

<强>从哪边着手去看响应式原理

我这边提供三个方向,从这三个方向,你都可以看到观察者的使用,然后观察者的使用过程中,会掺杂到观察者以及环保局,然后以点带面,对整体进行梳理

初始化的呈现流程去看

在生命周期这个文件中的mountComponent这个方法里,创建了一个观察者。代码如下:

new 观察者(vm, updateComponent,,等待,,{   ,before  (), {   if 才能;(vm._isMounted ,,, ! vm._isDestroyed), {   callHook才能(vm, & # 39; beforeupdate # 39;)   ,,}   ,}/*},,true  isRenderWatcher  */)

可以透过这个传参,梳理出整一个

<李>

从手表的角度去看

<李>

从计算的角度去看

<强>数据变化是如何驱动视图层更新的

这个问题其实可以分两个方面去看:

<强>如何知道数据变化了

如何知道某一块视图和数据有关,并更新他如何知道数据变化了

答案:数据劫持

数据劫持的两种方式

Object.defineProperty   代理

Vue3.0中的数据劫持是用代理来实现的,目前阅读的源码中,都是以<代码> Object.defineProperty 这种方式来实现的。

<>强如何知道某一块视图和数据有关,并更新他

答案:依赖收集以及订阅更新

详细解读过程:用图告诉你响应式原理

这里仅用一个简单的例子和图,来明确一下整个流程

& lt; div  id=癮pp"比;   ,{{,message }}   ,{{,message1 }}   ,& lt; input 类型=皌ext", v模型=癿essage"比;   ,& lt; div  @click=癱hangeMessage"在改变message
,,   & lt;/div> var  app =, Vue ({new    ,el: & # 39; #应用# 39;   ,数据:{   ,,信息:& # 39;1 & # 39;   ,,消息1:& # 39;2 & # 39;   },   ,方法:{   changeMessage才能(),{   ,,this.message =, & # 39; 2 & # 39;   ,,}   },   ,看:{   ,,信息:函数(val), {   ,,this.message1 =瓦尔   ,,}   ,}   })

依赖收集流程图

<人物>

 vue如何实现数据控制视图

依赖收集的最终结果:

<人物>

 vue如何实现数据控制视图

订阅更新流程图:

<人物>

 vue如何实现数据控制视图

<强>做题深化知识点

题目如下:

1,简述vue的响应式原理

2,计算属性和观看的区别

3, vue中给数据中的对象属性添加一个新的属性时会发生什么,如何解决?

对于第一和第二在这里就不花篇幅去说明。

<强> vue中给数据中的对象属性添加一个新的属性时会发生什么,如何解决?

我们在做业务的时候经常会遇到这样的情况,我举一个简单的例子:

& lt; template>   ,& lt; div>   ,& lt; ul>   & lt;才能li  v=皏alue  obj",拷贝:关键=皏alue"比;   ,,{{value}}   & lt;才能/li>   ,& lt;/ul>   ,& lt; button  @click=癮ddObjB"在添加obj.b   ,& lt;/div>   & lt;/template>   & lt; script>   export  default  {   ,data  (), {   ,return  {   obj才能:{   答:才能,& # 39;obj.a& # 39;   ,,}   ,}   },   ,方法:{   ,addObjB  (), {   时间=this.obj.b 才能;& # 39;obj.b& # 39;   console.log才能(this.obj)   ,}   ,}   }   & lt;/script>   & lt; style> & lt;/style>

依赖收集流程:

<人物>

 vue如何实现数据控制视图

从中我们可以发现,renderWatch是有收集

vue如何实现数据控制视图