浅谈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 简单导航实现代码
Sep 11 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
Nov 30 Javascript
js如何获取object类型里的键值
Feb 18 Javascript
jQuery学习笔记之Ajax用法实例详解
Dec 01 Javascript
基于jquery实现瀑布流布局
Jun 28 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
利用JQUERY实现多个AJAX请求等待的实例
Dec 14 jQuery
JavaScript中EventLoop介绍
Jan 22 Javascript
js传递数组参数到后台controller的方法
Mar 29 Javascript
微信公众平台 发送模板消息(Java接口开发)
Apr 17 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
May 17 Javascript
微信小程序防止多次点击跳转(函数节流)
Sep 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实现mysql数据库备份类
2008/03/20 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
2010/05/04 PHP
php结合表单实现一些简单功能的例子
2011/06/04 PHP
Thinkphp自定义代码生成工具及用法说明(附下载地址)
2016/05/27 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
showModalDialog 和 showModelessDialog
2007/01/22 Javascript
javascript 写类方式之四
2009/07/05 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
jQuery中:focus选择器用法实例
2014/12/30 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
AngularJS在IE8的不支持的解决方法
2016/05/13 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
node实现的爬虫功能示例
2018/05/04 Javascript
Express结合Webpack的全栈自动刷新
2019/05/23 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
实例分析JS中的相等性判断===、 ==和Object.is()
2019/11/17 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
利用Celery实现Django博客PV统计功能详解
2017/05/08 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
银行毕业实习自我鉴定
2013/09/19 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
政治学求职信
2014/06/03 职场文书
寒假安全保证书
2015/02/28 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL
详解Go语言中Get/Post请求测试
2022/06/01 Golang