浅谈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性能优化 创建文档碎片(document.createDocumentFragment)
Jul 13 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
Apr 16 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
Nov 15 Javascript
利用vue实现模态框组件
Dec 19 Javascript
js+div+css下拉导航菜单完整代码分享
Dec 28 Javascript
浅谈js中的this问题
Aug 31 Javascript
实例分析编写vue组件方法
Feb 12 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
解析link_mysql的php版
2013/06/30 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
用PHP的反射实现委托模式的讲解
2019/03/22 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
JavaScript实现简单获取当前网页网址的方法
2015/11/09 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
详解JavaScript中this的指向问题
2017/01/20 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
2017/03/21 Javascript
Python中的作用域规则详解
2015/01/30 Python
详解Python中用于计算指数的exp()方法
2015/05/14 Python
python变量不能以数字打头详解
2016/07/06 Python
用Python将IP地址在整型和字符串之间轻松转换
2017/03/22 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python 申请内存空间,用于创建多维数组的实例
2019/12/02 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
Python作用域与名字空间原理详解
2020/03/21 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
python如何实现递归转非递归
2021/02/25 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
如何进行Linux分区优化
2016/09/13 面试题
十岁生日家长答谢词
2014/01/17 职场文书
高中家长寄语
2014/04/02 职场文书
优秀护士事迹材料
2014/12/25 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
感恩父母主题班会
2015/08/12 职场文书