浅谈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学习4 浏览器的事件模型
Feb 07 Javascript
分享一个常用的javascript静态类
Dec 31 Javascript
jQuery中:nth-child选择器用法实例
Dec 31 Javascript
javascript for-in有序遍历json数据并探讨各个浏览器差异
Nov 30 Javascript
纯js实现倒计时功能
Jan 06 Javascript
jQuery Tree Multiselect使用详解
May 02 jQuery
vue.js中Vue-router 2.0基础实践教程
May 08 Javascript
layui复选框的全选与取消实现方法
Sep 02 Javascript
React Native 混合开发多入口加载方式详解
Sep 23 Javascript
解决vue初始化项目时,一直卡在Project description上的问题
Oct 31 Javascript
微信小程序全选多选效果实现代码解析
Jan 21 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
Oct 28 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设计模式之单例模式使用示例
2014/01/20 PHP
php更新修改excel中的内容实例代码
2014/02/26 PHP
php一个解析字符串排列数组的方法
2015/05/12 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
jquery选择器使用详解
2014/04/08 Javascript
JS中prototype的用法实例分析
2015/03/19 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
VueJS全面解析
2016/11/10 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
2017/06/13 jQuery
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
关于HTML5的data-*自定义属性的总结
2018/05/05 Javascript
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
PyCharm设置注释字体颜色以及是否倾斜的操作
2020/09/16 Python
python两个list[]相加的实现方法
2020/09/23 Python
如何进行有效的自我评价
2013/09/27 职场文书
厨师长岗位职责
2014/03/02 职场文书
委托书格式
2014/08/01 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
售后服务承诺函格式
2015/01/21 职场文书
安全员岗位职责范本
2015/04/11 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
大学生社会服务心得体会
2016/01/22 职场文书