浅谈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中出现乱码的处理心得
Dec 24 Javascript
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
JavaScript包装对象使用介绍
Aug 29 Javascript
javascript常用的正则表达式实例
May 15 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
Nov 17 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
JavaScript实现大图轮播效果
Jan 11 Javascript
关于vue-router的beforeEach无限循环的问题解决
Sep 09 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
vue实现PC端录音功能的实例代码
Jun 05 Javascript
JavaScript大数相加相乘的实现方法实例
Oct 18 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简单提示框alert封装函数
2010/08/08 PHP
php调用nginx的mod_zip模块打包ZIP文件
2014/06/11 PHP
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
jquery中的mouseleave和mouseout的区别 模仿下拉框效果
2012/02/07 Javascript
js改变文章字体大小的实例代码
2013/11/27 Javascript
document节点对象的获取方式示例介绍
2013/12/24 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
JavaScript中用于生成随机数的Math.random()方法
2015/06/15 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
jQuery实现联动下拉列表查询框
2017/01/04 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
es6 symbol的实现方法示例
2019/04/02 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
如何基于JavaScript判断图片是否加载完成
2019/12/28 Javascript
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
numpy中矩阵合并的实例
2018/06/15 Python
Python学习笔记之Django创建第一个数据库模型的方法
2019/08/07 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
python求解汉诺塔游戏
2020/07/09 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
Oracle性能调优原则
2012/05/03 面试题
消防安全员岗位职责
2014/03/10 职场文书
安全责任书范文
2014/08/25 职场文书
2015年实习单位评语
2015/03/25 职场文书
2015年保险公司内勤工作总结
2015/05/23 职场文书
基于Python实现西西成语接龙小助手
2022/08/05 Golang