浅谈Vue的响应式原理


Posted in Javascript onMay 30, 2019

一、响应式的底层实现

1、Vue与MVVM

Vue是一个 MVVM框架,其各层的对应关系如下

  • View层:在Vue中是绑定dom对象的HTML
  • ViewModel层:在Vue中是实例的vm对象
  • Model层:在Vue中是data、computed、methods等中的数据

在 Model 层的数据变化时,View层会在ViewModel的作用下,实现自动更新

2、Vue的响应式原理

Vue响应式底层实现方法是 Object.defineProperty() 方法,该方法中存在一个getter和setter的可选项,可以对属性值的获取和设置造成影响

Vue中编写了一个wather来处理数据

在使用getter方法时,总会通知wather实例对view层渲染页面
同样的,在使用setter方法时,总会在变更值的同时,通知wather实例对view层进行更新
3、响应式原理与兼容

由于 Object.defineProperty() 方法只部分支持IE9,所以Vue兼容IE版本最低为IE9,在IE9中,Vue的核心框架、vue-router、vuex是确保可以正常使用的

4、响应式原理示意图

浅谈Vue的响应式原理

1、在实例前声明

var vm = new Vue({
data: {
name: "failte"
}
})

在实例前声明的属性会在实例时添加 getter()、setter() 方法,因此此时的name是响应式的,每当name变化时,会自动更新视图

2、在实例后添加

vm.name = "failte"

由于data中没有该属性,因此实例后,此时的name是非响应式的,name变化时,不会更新视图
若需要转换为响应式数据,需要使用 Vue.set() 方法手动添加为响应式属性

Vue.set(vm.data, "name", "ajaccio")
//Vue.$set是该方法的别名

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中常见的校验如域名、手机、邮箱等等
Jan 02 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
用jQuery模拟select下拉框的简单示例代码
Jan 26 Javascript
深入理解Javascript中this的作用域
Aug 12 Javascript
推荐一款jQuery插件模板
Jan 09 Javascript
angularJS 入门基础
Feb 09 Javascript
在一个页面实现两个zTree联动的方法
Dec 20 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
微信小程序列表中item左滑删除功能
Nov 07 Javascript
vant(ZanUi)结合async-validator实现表单验证的方法
Dec 06 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 Javascript
JavaScript实现表单验证功能
Dec 09 Javascript
vue实现固定位置显示功能
May 30 #Javascript
搭建一个Koa后端项目脚手架的方法步骤
May 30 #Javascript
JS使用cookie保存用户登录信息操作示例
May 30 #Javascript
详解vue 动态加载并注册组件且通过 render动态创建该组件
May 30 #Javascript
Vue使用axios出现options请求方法
May 30 #Javascript
vue动态注册组件实例代码详解
May 30 #Javascript
实用的Vue开发技巧
May 30 #Javascript
You might like
PHP判断是否有Get参数的方法
2014/05/05 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
js 限制数字 js限制输入实现代码
2012/12/04 Javascript
通过实例理解javascript中没有函数重载的概念
2015/06/03 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
JS实现带有3D立体感的银灰色竖排折叠菜单代码
2015/10/20 Javascript
JavaScript代码轻松实现网页内容禁止复制(代码简单)
2015/10/23 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
jQuery中table数据的值拷贝和拆分
2017/03/19 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
十分钟带你快速了解React16新特性
2017/11/10 Javascript
vue 使用vue-i18n做全局中英文切换的方法
2018/10/29 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
layer 关闭指定弹出层的例子
2019/09/25 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
零基础使用Python读写处理Excel表格的方法
2019/05/02 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
纯净、自信、100%的羊绒服装:360Cashmere
2021/02/20 全球购物
申报材料格式
2014/12/30 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
MySQL空间数据存储及函数
2021/09/25 MySQL
PostgreSQL常用字符串分割函数整理汇总
2022/07/07 PostgreSQL