深入理解Vue响应式原理

深入理解Vue响应式原理本文 由浅入深 详细讲述了 Vue 响应式原理

前言

如何监测数据的变化

要想准确响应数据的变化,首先需要精确及时的监测数据的变化,Vue检测数据的变化核心还是通过Object.defineProperty();下面通过实例为大家详细阐述Vue检测数据变化的过程,代码示例如下:

<script type="text/javascript" > let data = { 
    name:'xizhutao', address:'安徽', } //创建一个监视的实例对象,用于监视data中属性的变化 const obs = new Observer(data) console.log(obs) //准备一个vm实例对象 let vm = { 
   } vm._data = data = obs function Observer(obj){ 
    //汇总对象中所有的属性形成一个数组 const keys = Object.keys(obj) //遍历 keys.forEach((k)=>{ 
    Object.defineProperty(this,k,{ 
    get(){ 
    return obj[k] }, set(val){ 
    console.log(`${ 
     k}被改了,我要去解析模板,生成虚拟DOM.....我要开始忙了`) obj[k] = val } }) }) } </script> 

注意事项

对象

Vue不能监测对象的Property的添加和删除,在监测数据变化原理中讲到,在Vue初始化实例对象时,会将data对象中的属性存到数组中进行遍历,然后调用Object.defineProperty()给属性添加get , set方法监视data对象中属性的变化,因此如果我们在初始化实例对象后,给Vue实例添加属性,并不会给添加的属性添加对应的get、set方法,导致添加的属性并不是响应式的;如果你还不理解,请看以下示例代码:

var vm = new Vue({ 
    data:{ 
    a:11 } }) // vm.a 是响应式的 vm.b = 22 // vm.b 是非响应式的 
//someObject为嵌套在data数据对象内的一个对象 Vue.set(vm.someObject, 'b', 22) vm.$set(this.someObject,'b',22) 

⚠注意:set方法不能给vm或vm的根数据对象设置属性,只能给跟数据对象中嵌套的对象设置属性❗❗❗

数组

Vue不能监测以下数组的变动:1、通过索引号修改数组的对应值,修改后的值不是响应式的;2.通过length修改数组长度时,数据不是响应式的;示例如下:

var vm = new Vue({ 
    data: { 
    items: ['a', 'b', 'c'] } }) vm.items[1] = 'x' // 不是响应性的 vm.items.length = 2 // 不是响应性的 
var vm = new Vue({ 
    data: { 
    items: ['a', 'b', 'c'] } }) Vue.set(vm.items , 0 , 'aa') // 响应性的 vm.$set(vm.items , 0 , 'aa') // 响应性的 vm.items.splice(0 , 1 , 'aa')//响应性的 //通过length vm.items.splice(2)//响应性的 

更详细的信息请查看Vue.js官网:深入理解响应式原理

写在最后

?(❁´◡`❁)您的点赞?➕评论?➕收藏⭐是作者创作的最大动力?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199154.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:43
下一篇 2026年3月26日 下午1:44


相关推荐

  • Graphviz:可视化工具Graphviz的简介、安装、使用方法、经典案例之详细攻略

    Graphviz:可视化工具Graphviz的简介、安装、使用方法、经典案例之详细攻略Graphviz 是一个开源的图形可视化软件 图的可视化是将结构信息表示为抽象图和网络图的一种方法 它在网络 生物信息学 软件工程 数据库和 web 设计 机器学习以及其他技术领域的可视化接口方面具有重要的应用 Graphviz 布局程序以简单的文本语言描述图形 并以有用的格式 如 web 页面的图像和 SVG 生成图形 PDF 或附言 以供纳入其他文件 或显示在交互式图形浏览器中 Graphviz 对于具体图表有许多有用的特性 比如颜色 字体 表格节点布局 行样式 超链接和自定义形状的选项 官方地址相关文档

    2026年3月20日
    2
  • Redis的五种数据结构的底层实现原理

    Redis的五种数据结构的底层实现原理

    2021年4月10日
    123
  • 从零开始写一个RTSP服务器(一)RTSP协议讲解

    从零开始写一个RTSP服务器(一)RTSP协议讲解从零开始写一个 RTSP 服务器系列从零开始写一个 RTSP 服务器 一 不一样的 RTSP 协议讲解从零开始写一个 RTSP 服务器 二 RTP 传输 H 264 待写 从零开始写一个 RTSP 服务器 三 一个传输 H 264 的 RTSP 服务器 待写 从零开始写一个 RTSP 服务器 四 RTP 传输 AAC 待写 从零开始写一个 RTSP 服务器 五 一个传输 AAC 的 RTSP 服务器 待写 从零开始写一个 RTSP 服务器

    2026年3月20日
    2
  • 树莓派是什么 树莓派能做什么 树莓派的功能用途

    树莓派是什么 树莓派能做什么 树莓派的功能用途阿里云官方镜像源:https://developer.aliyun.com/mirror/?utm_content=g_1000304579树莓派是指RaspberryPi,是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,其系统基于Linux。随着Windows10IoT的发布,我们也将可以用上运行Windows的树莓派。下面小编给大家介绍一下“树莓派是什么树莓派能做什么树莓派的功能用途”1.树莓派是什么树莓派是指RaspberryPi,是为学习计算机编程

    2022年6月10日
    40
  • AOSP开源协议_open sap

    AOSP开源协议_open sapOLAP(OnlineAnalyticalProcessing)是指在线联机分析,基于数据查询计算并实时获得返回结果。日常业务中的报表、数据查询、多维分析等一切需要即时返回结果的数据查询任务都属于OLAP的范畴。对应的,行业内也有相应产品来满足这类需求,那就是OLAPServer。当前主流OLAPServer几乎都是基于RDB或封装成RDB的大数据平台,有点类似早期的ROLAP(这个词已经很少被提及了),其中一个关键的特征是使用SQL作为查询语言。RDB和SQL的特性会给OLAPServer带来诸

    2025年8月10日
    10
  • savefiledialog用法_空白文档的默认文件名

    savefiledialog用法_空白文档的默认文件名把xml文档转换为excel文档,希望保存时默认的文件名是xml文档的同名.xlsx。

    2022年10月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号