浅谈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 相关文章推荐
jquery插件之easing使用
Aug 19 Javascript
jquery操作 iframe的方法
Dec 03 Javascript
JavaScript Sort 的一个错误用法示例
Mar 20 Javascript
JavaScript对象学习小结
Sep 02 Javascript
JS实现仿FLASH效果的竖排导航代码
Sep 15 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
Oct 05 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
Dec 02 Javascript
微信小程序之购物车功能
Sep 23 Javascript
详解小程序缓存插件(mrc)
Aug 17 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
Jul 19 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
JAVA/JSP学习系列之七
2006/10/09 PHP
php中几种常见安全设置详解
2010/04/06 PHP
php去除HTML标签实例
2013/11/06 PHP
destoon实现底部添加你是第几位访问者的方法
2014/07/15 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
js左侧三级菜单导航实例代码
2013/09/13 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
javascript实现简单的可随机变色网页计算器示例
2016/12/30 Javascript
jquery简单实现纵向的无缝滚动代码实例
2019/04/01 jQuery
vue中img src 动态加载本地json的图片路径写法
2019/04/25 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
Vue中key的作用示例代码详解
2020/06/10 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
Python实现感知机(PLA)算法
2017/12/20 Python
python实现ID3决策树算法
2017/12/20 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
pyqt5 获取显示器的分辨率的方法
2019/06/18 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
Python小白垃圾回收机制入门
2020/06/09 Python
纯CSS实现预加载动画效果
2017/09/06 HTML / CSS
英国电子专家:maplin
2019/09/04 全球购物
幼儿园五一劳动节活动总结
2015/02/09 职场文书
商务英语求职信范文
2015/03/19 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
政审证明材料
2015/06/19 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python