美文网首页
深入响应式原理 - 2018-05-17

深入响应式原理 - 2018-05-17

作者: 勇敢的小拽马 | 来源:发表于2018-05-17 20:36 被阅读0次
  • 2018-05-17 创建

现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。这使得状态管理非常简单直接,不过理解其工作原理同样重要,这样你可以回避一些常见的问题。在这个章节,我们将进入一些 Vue 响应式系统的底层的细节。

如何追踪变化

当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器的原因。

这些 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。这里需要注意的问题是浏览器控制台在打印数据对象时 getter/setter 的格式化并不同,所以你可能需要安装 vue-devtools 来获取更加友好的检查接口。

每个组件实例都有相应的 watcher 实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的 setter 被调用时,会通知 watcher 重新计算,从而致使它关联的组件得以更新。

image.png

检测变化的注意事项

受现代 JavaScript 的限制 (以及废弃 Object.observe),Vue 不能检测到对象属性的添加或删除。由于 Vue 会在初始化实例时对属性执行 getter/setter 转化过程,所以属性必须在 data 对象上存在才能让 Vue 转换它,这样才能让它是响应的。例如:

var vm = new Vue({
  data:{
  a:1
  }
})

// `vm.a` 是响应的

vm.b = 2
// `vm.b` 是非响应的

Vue 不允许在已经创建的实例上动态添加新的根级响应式属性 (root-level reactive property)。然而它可以使用 Vue.set(object, key, value) 方法将响应属性添加到嵌套的对象上:

Vue.set(vm.someObject, 'b', 2)

您还可以使用 vm.$set 实例方法,这也是全局 Vue.set 方法的别名:

this.$set(this.someObject,'b',2)

有时你想向已有对象上添加一些属性,例如使用 Object.assign() 或 _.extend() 方法来添加属性。但是,添加到对象上的新属性不会触发更新。在这种情况下可以创建一个新的对象,让它包含原对象的属性和新的属性:

// 代替 `Object.assign(this.someObject, { a: 1, b: 2 })`
this.someObject = Object.assign({}, this.someObject, { a: 1, b: 2 })

相关文章

  • VUE双向绑定原理(深入响应式原理)

    vue官网-深入响应式原理 深入响应式原理

  • 深入响应式原理 - 2018-05-17

    2018-05-17 创建 现在是时候深入一下了!Vue 最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅...

  • 详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归...

  • 深入响应式原理

    后台给的返回值如下所示: 要实现的功能:点击选中,再点就取消选中想到的方案是往对象中添加active属性,默认为f...

  • 深入响应式原理

    1.如何追踪变化 通过Object.defineProperty将对象属性转换为getter/setter(ES5...

  • 深入响应式原理

    定义对象 var obj = new Object; //obj = {}obj.name = "张三"; ...

  • 深入响应式原理

    前言 Vue最独特的特性之一,是其非侵入型的响应式系统。数据模型仅仅是普通的JavaScript对象(虚拟DOM)...

  • Vue数据响应式

    本篇主要原理可在深入响应式原理[https://vuejs.bootcss.com/guide/reactivit...

  • vue响应式原理

    谈谈阅读了vue深入响应式原理后的理解 1.响应式原理 在生成vue实例时,为对传入的data进行遍历,使用Obj...

  • VUE学习

    【链接】深入响应式原理http://cn.vuejs.org/guide/reactivity.html 【链接】...

网友评论

      本文标题:深入响应式原理 - 2018-05-17

      本文链接:https://www.haomeiwen.com/subject/qvuidftx.html