vue响应式原理和双向绑定,vue2.0响应式原理

  vue响应式原理和双向绑定,vue2.0响应式原理

  Vue最独特的特征之一是它的非侵入式响应系统。下面主要介绍vue响应原理和双向数据的相关信息。有需要的朋友可以参考一下。

  了解object.defineProperty实现响应

  确切地知道观察者/监视者/dep指的是什么。

  了解发布-订阅模型及其解决的具体问题。

  Javascript中实现数据响应一般有两种方案,分别对应vue2.x和vue3.x使用的方式。它们是:

  对象拦截(vue2.x) Object.defineProperty

  整体对象代理(vue3.x)代理

  提示:以下是本文的主要内容,以下案例可供参考。

  

vue-响应式是什么?

  Vue最独特的特征之一是它的非侵入式响应系统。数据模型只是普通的JavaScript对象。当您修改它们时,视图将会更新。这使得状态管理非常简单明了,但是理解它是如何工作的同样重要,这样可以避免一些常见的问题。在本章中,我们将学习

  Vue响应系统的底层细节。

  

vue-响应式如何实现的?

  数据响应性:数据模型只是一个普通的JavaScript对象,当我们修改数据时,视图会更新,避免了频繁的Dom操作,提高了开发效率。这与Jquery不同,Jquery是一种频繁的DOM操作。

  

对双向数据绑定的理解

  改数据,改视图,改视图,改数据(通过这句话,可以看出双向绑定包含了数据响应的内容)。

  我们可以使用v-model在表单元素上创建双向数据绑定。

  数据驱动是Vue最独特的功能之一。

  在开发过程中,我们只需要关注数据本身,而不需要关注数据是如何渲染到视图中的。主流的MVVM框架已经实现了数据响应和双向绑定,所以它们可以将数据绑定到DOM。

  在vue.js中,所谓的数据驱动是指当数据发生变化时,用户界面也随之变化,开发者不需要手动修改dom。

  

对数据驱动的理解:

  那么vuejs是如何实现这种数据驱动的呢?

  Vue实现双向数据绑定主要是采用数据劫持结合发布者-订阅者模式,通过Object.defineProperty()劫持各种属性的setter和getter,在数据发生变化时向订阅者发布消息,并触发相应的监控回调。当一个普通的Javascript对象作为它的数据选项传递给Vue实例时,Vue将遍历它的属性,并使用Object.defineProperty将它们转换为Getter/setter。Getter/setter对用户是不可见的,但在内部,它们让Vue跟踪依赖关系,并在属性被访问和修改时通知更改。

  vue的数据双向绑定

  MVVM作为数据绑定的入口,集成了观察器、编译器和观察器。观察者监控自己模型的数据变化,编译编译好的模板指令(在vue中,用来解析{{}})。最后,使用Watcher在观察者和编译器之间搭建一座沟通的桥梁,从而实现数据的改变——视图的更新。查看交互更改(输入)-数据模型更改双向绑定效果。

  

对vue-双向数据的分析?/v-model 双向数据绑定的原理

  代码如下(示例):

  脚本

  //在有值的情况下写入对象

  let data={

  姓名:李白,

  年龄:18岁

  }

  Object.keys(数据)。forEach(key={

  defineReactiveProperty(data,key,data[key])

  })

  函数defineReactiveProperty(数据,键,值){

  Object.defineProperty(数据,键,{

  //获取获取

  get() {

  返回值

  },

  //设置赋值

  设置(新值){

  if (newVaue===value) {

  返回

  }

  价值=新价值

  编译()

  }

  })

  }

  编译()

  /脚本

  /body

  /html

  函数compine () {

  //通过document.queryselect (# app )获取app下的所有子元素。子节点

  const nodes=document . query selector(# app)。子节点

  //输出这个值。当前值是分层嵌套数组。我们使用foreach

  //console.log(节点)

  nodes.forEach(item={

  //再次输出item html输入type= text v-model= name 是一个输入输入框。

  //console.log(item)

  //过滤掉当前标签,因为节点的这个输出会把space设置为 text nodeType为3,而label nodetype为1,if判断为有标签。

  if (item.nodeType===1){

  const attrs=item.attributes

  //console.log (attrs) {0: type,1: v-model,type: type,v-model: v-model,length: 2}返回1是数组

  Array.from(attrs)。forEach( arr={

  //console . log(arr)//tex gt= text v-mode: name ,筛选出这个v-mode。

  if (arr.nodeName===v-model){

  item.value=data[arr.nodeValue]

  item.addEventListener(input ,e={

  console.log(e.target.value)

  //

  数据[数组节点值]=e .目标值

  })

  }

  })

  }

  })

  }

  

总结

  数据响应的实现无非是对象属性拦截。我们使用Object.defineProperty来实现它,并在vue3中制作它

  通过代理对象代理方案对其进行优化。

  采访书中提到的一些专业术语

  观察对象是指将数据处理成响应的对象。

  Watcher实际上是指数据发生变化后的更新功能(vue中有两种watcher,一种是用来更新视图的watcher,另一种是通过watch配置项声明的watcher)。

  Dep是指集合更新函数和触发发布和订阅实现的更新函数的对象。

  指令实现的核心无非就是通过模板编译找到logo,然后把数据捆绑起来,等数据发生变化后再放上去。

  发布模式的本质是解决一对多的问题,实现vue发生变化后数据的准确更新。

  关于vue响应式原理和双向数据的这篇文章到此为止。关于vue响应式原理和双向数据的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

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

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