浅谈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 22 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
Js获取数组最大和最小值示例代码
Oct 29 Javascript
jquery.cookie用法详细解析
Dec 18 Javascript
javascript中var的重要性分析
Feb 11 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
Angular之指令Directive用法详解
Mar 01 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
Jun 09 Javascript
Angular4开发解决跨域问题详解
Aug 28 Javascript
angularJS自定义directive之带参方法传递详解
Oct 09 Javascript
js利用iframe实现选项卡效果
Aug 09 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
Oct 19 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 判断变量类型实现代码
2009/10/23 PHP
重新认识php array_merge函数
2014/08/31 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
详解element-ui中form验证杂记
2019/03/04 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
[01:23:59]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 VP vs Secret
2018/04/03 DOTA
python列表与元组详解实例
2013/11/01 Python
Python中处理字符串的相关的len()方法的使用简介
2015/05/19 Python
Django框架下在视图中使用模版的方法
2015/07/16 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
python实现桌面气泡提示功能
2019/07/29 Python
微软澳洲官方网站:Microsoft Australia
2017/01/10 全球购物
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
美国名牌香水折扣网站:Hottperfume
2021/02/10 全球购物
安全责任书范文
2014/08/25 职场文书
销售工作决心书
2015/02/04 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
爱心募捐通知范文
2015/04/27 职场文书
爱心捐书倡议书
2015/04/27 职场文书
捐款仪式主持词
2015/07/04 职场文书
升学宴学生致辞
2015/09/29 职场文书
MySQL 分组查询的优化方法
2021/05/12 MySQL
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS