1.响应式原理

把js对象传入一个vue实例作为data项,进行遍历,使用Object.defineProperty把这些属性转为getter/setter

Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是 Vue 不支持 IE8 以及更低版本浏览器的原因。

每个vue实例都有一个watcher实例,它会在实例渲染时记录这些属性,并在setter触发时重新渲染。

Vue 不能检测数组和对象的变化

Vue 不允许动态添加根级别的响应式 property。但是,可以使用 Vue.set(object, propertyName, value) 方法向嵌套对象添加响应式 property

2.声明响应式属性(property)

由于 Vue 不允许动态添加根级响应式属性,所以你必须在初始化实例前声明所有根级响应式属性,哪怕只是一个空值。

如果你未在 data 选项中声明 message,Vue 将警告你渲染函数正在试图访问不存在的属性。

3.异步更新队列

vue更新dom时是异步执行的

数据变化、更新是在主线程中同步执行的;在侦听到数据变化时,watcher将数据变更存储到异步队列中,当本次数据变化,即主线成任务执行完毕,异步队列中的任务才会被执行(已去重)。

如果你在js中更新数据后立即去操作DOM,这时候DOM还未更新;vue提供了nextTick接口来处理这样的情况,它的参数是一个回调函数,会在本次DOM更新完成后被调用。

使用方法:

1.在组件内使用 vm.$nextTick() 实例方法特别方便,因为它不需要全局 Vue,并且回调函数中的 this 将自动绑定到当前的 Vue 实例上

Vue.component('example', {template: '<span>{{ message }}</span>',data: function () {return {message: '未更新'}},methods: {updateMessage: function () {this.message = '已更新'console.log(this.$el.textContent) // => '未更新'this.$nextTick(function () {console.log(this.$el.textContent) // => '已更新'})}}
})

2.因为 $nextTick() 返回一个 Promise 对象,所以你可以使用新的 ES2016 async/await 语法完成相同的事情

methods: {updateMessage: async function () {this.message = '已更新'console.log(this.$el.textContent) // => '未更新'await this.$nextTick()console.log(this.$el.textContent) // => '已更新'}
}

Vue响应式更新原理(个人总结)相关推荐

  1. Vue 响应式实现原理深入浅出

    前言 vue 是一个易上手的框架,许多便捷功能都在其内部做了集成,其中最有区别性的功能就是其潜藏于底层的响应式系统.组件状态都是响应式的 JavaScript 对象.当更改它们时,视图会随即更新,这让 ...

  2. Vue响应式实现原理

    Vue响应式原理 Vue是数据驱动视图实现双向绑定的一种前端框架,采用的是非入侵性的响应式系统,不需要采用新的语法(扩展语法或者新的数据结构)实现对象(model)和视图(view)的自动更新,数据层 ...

  3. Vue响应式原理的简单模型

    1.前言 最近在梳理vue响应式的原理,有一些心得,值得写一篇博客出来看看. 其实之前也尝试过了解vue响应式的原理,毕竟现在面试看你用的是vue的话,基本上都会问你几句vue响应式的原理.以往学习这 ...

  4. Vue学习 — Vue响应式原理

    一. Object.defineProperty 在学习vue响应式原理之前,必须搞懂 Object.defineProperty. Object.defineProperty(obj, prop, ...

  5. vue 数组删除 dome没更新_详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

  6. 你不知道的Vue响应式原理

    文章首发于github Blog. 本文根据Vue源码v2.x进行分析.这里只梳理最源码中最主要的部分,略过非核心的一些部分.响应式更新主要涉及到Watcher,Dep,Observer这几个主要类. ...

  7. 【Vue 3.0 新特性(四)】Vue 3.0 响应式系统原理

    文章前言 笔记来源:拉勾教育 大前端高薪训练营 阅读建议:内容较多,建议通过左侧导航栏进行阅读 Vue 3.0 响应式系统原理 基础回顾 Vue.js 响应式回顾 Proxy 对象实现属性监听 多层属 ...

  8. 深入浅出 Vue 响应式原理!

    作者 | 浪里行舟 责编 | 胡巍巍 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接 ...

  9. Vue响应式原理 vue源码(十一)

    前言 看过很多讲响应式的文章,大多都是告诉你们,有Observer,Dep,Wathcer类,Object.definePorperty,先会触发get中的dep.depend收集依赖,然后数据改变时 ...

最新文章

  1. 使用SpringBoot发送邮件 在本地测试是好的 放到服务器连接超时问题
  2. SMRT single molecular real time Sequencing
  3. python相关背景及语言特点
  4. 显示 grep 结果的指定行
  5. T_SQL的 FOR XML PATH 用法
  6. SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求
  7. 设计灵感|简单的几何图形还能这么用在网页设计中!
  8. mysql update 批量更新_mysql 批量更新的两种方法
  9. java 图片服务器 上传_Java实现把图片上传到图片服务器(nginx+vsftp)
  10. 类数组的push方法
  11. 16QAM-调制解调MATLAB
  12. nuxt实现服务端渲染查看源代码显示动态接口数据
  13. SpringCloud全家桶主要组件及通信协议剖析
  14. 算法——动态规划(DP)
  15. 运营管理 优化成本管理成就卓越绩效采购
  16. AutoCAD中实现多个单行文字水平对齐(利用LISP)
  17. 从估值一亿到一夜分家:一个曾经存在过的教育产品的故事
  18. 追梦五年——不胜人生一场醉
  19. 运动类APP开发的产品分析
  20. 蓝牙Sig Mesh 概念入门②——网络角色

热门文章

  1. Python 优化 回溯下降算法
  2. drf jwt 认证
  3. 鸿蒙手机华为meta 30 第一次链接电脑下载驱动
  4. C# 结构体的创建和使用
  5. 在riscv sifive u740开发板上运行FreeRTOS及裸板程序
  6. c语言考试系统题库判断和选择,C考试系统题库判断和选择.doc
  7. 【淘宝SEO技巧】深度揭秘淘宝搜索排名算法模型
  8. 【搜索入门专题1】hdu1253 【BFS】 F - 胜利大逃亡
  9. 设计模式之工厂设计模式及抽象工厂设计模式
  10. python中cos函数_Python代码中cos()函数有什么功能呢?