浅谈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 相关文章推荐
常用的JS验证和函数汇总
Dec 23 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
Aug 15 Javascript
JavaScript学习笔记整理_简单实现枚举类型,扑克牌应用
Sep 19 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
详解Vue组件之间的数据通信实例
Jun 17 Javascript
详解vue 模拟后台数据(加载本地json文件)调试
Aug 25 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
JS函数进阶之继承用法实例分析
Jan 15 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
Dec 30 jQuery
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判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP实现无限分类的实现方法
2016/11/14 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
微信小程序 地图(map)实例详解
2016/11/16 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
nodejs超出最大的调用栈错误问题
2017/12/27 NodeJs
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
vuex管理状态仓库使用详解
2020/07/29 Javascript
Python translator使用实例
2008/09/06 Python
利用Python破解验证码实例详解
2016/12/08 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python 多进程和数据传递的理解
2017/10/09 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
python协程之动态添加任务的方法
2019/02/19 Python
Python检查 云备份进程是否正常运行代码实例
2019/08/22 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
2020/02/28 Python
解决jupyter运行pyqt代码内核重启的问题
2020/04/16 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
世界闻名的衬衫制造商:Savile Row Company
2018/07/30 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
暑期社会实践感言
2014/02/25 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
2015年保险公司个人工作总结
2015/05/22 职场文书
社会实践单位意见
2015/06/05 职场文书
少年雷锋观后感
2015/06/10 职场文书
导游词之崇武古城
2019/10/07 职场文书