首页 > 编程语言 >对vue响应式数据的理解(vue基础,面试,源码级讲解)

对vue响应式数据的理解(vue基础,面试,源码级讲解)

时间:2024-10-14 23:20:50浏览次数:10  
标签:劫持 vue 对象 数据 Object 源码 讲解 defineProperty 方法

首先我们要知道哪些数据可以劫持。 

  1.  是否可以劫持

    • 在JavaScript等动态语言中,字符串和数字虽然是基本数据类型(也称为原始数据类型),但它们可以包装成对象(如String对象和Number对象)进行处理。当它们被包装成对象后,就可以使用对象的方法,包括Object.defineProperty等方法进行数据劫持。
    • 但需要注意的是,对于原始数据类型(未包装成对象时),无法直接应用Object.defineProperty等方法进行劫持。这是因为原始数据类型不是对象,没有属性可以定义或修改。

vue2的简单实现:

(我会在下一篇文章中讲到在vue2中对数组的检测变化)

 讲解:

当定义了一个data数据,首先将数据传入observer方法中,将对象中的每一项键值对取出调用defineReactive方法。

在defineReactive中,递归遍历值,直到数据为基本数据类型。使用Object.defineProperty(原数据,键,{ getset方法 })对数据中的键添加get和set方法,实现数据劫持。

vue3的简单实现:

 讲解:

当定义了一个obj数据,首先将数据传入reactive方法中,在方法中使用Proxy对数据进行劫持,添加getset方法。当数据中的属性每调用时,会执行get方法,从原数据中找到对应的值,判断该值是否为object类型,如果是,再次用Proxy对该值进行数据劫持;如果不是,则返回值。

这种方法,实现了对数据的懒代理,如果我没有去取对象中的数据(结合案例,指obj.n中的值),那么该对象就不会被代理(结合案例,指obj.n)。

标签:劫持,vue,对象,数据,Object,源码,讲解,defineProperty,方法
From: https://blog.csdn.net/qq_62541773/article/details/142930316

相关文章

  • 毕设分享《基于jsp“众优”大学生家教平台的设计与实现》(源码+lw+解析等)
    1.个人简介 博主介绍:  ✌我是一位专注于计算机技术领域的程序员,全网拥有30W+粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台的优质作者。通过长期分享和实战指导,我致力于帮......
  • Vue3 路由(上)
    路由器两种模式history模式:constrouter=CreateRouter({history:createWebHistory(),//history模式})优点:url更加美观,不带有#,更接近传统网站的url缺点:后期项目上限,需要配合服务端处理路径问题,否则刷新会404错误hash模式:constrouter=CreateRouter({histor......
  • vue中如何检测数组变化(vue基础,面试,源码级讲解)
    大家有什么不明白的地方可以分享在评论区,大家一起探讨哦~~(如果对数据劫持还有所不明白的小伙伴,可以去看看上一篇文章哦)在vue2中,是如何对数组进行劫持的呢?简单代码实现: 在vue2中,不会对数组的每一项数据进行递归Object.defineProperty()方法劫持,这样是很浪费性能的。而......
  • ArrayList源码分析(底层数据结构,成员变量,构造方法)以及面试题(基于JDK1.8)
    要分析Arraylist,我们首先要从它的底层数据结构实现出发,再结合其底层源码,可能能让读者理解的更加深刻一点。1,底层数据结构(数组)Arraylist底层是基于动态数组实现的。数组是一种使用连续储存空间储存相同数据类型的线性数据结构。面试题1为什么数组索引从0开始不从1开始?分......
  • java数组讲解
    前言:由上两章,我们已经了解关于java的基础语法,这章我们将讲解数组的相关语法,坐好了没,我们准备要发车啦!!!我们将从五部分给大家讲解:1数组的基本概念2.数组是引用类型3.数组的应用场景4.数组的练习5.二维数组1数组的基本概念:1.1 为什么要使用数组1.存储多个相同类型的......
  • Vue 3 和 TypeScript 项目中使用 i18n
    在Vue3和TypeScript项目中使用i18n(国际化)可以通过vue-i18n插件来实现。步骤1:安装依赖首先,你需要安装vue-i18n:npminstallvue-i18n步骤2:创建语言文件在项目中创建一个文件夹(如src/i18n),并在其中创建语言文件。比如,创建en.json和zh.json:src/i18n/en.json{......
  • 基于SpringBoot的家政服务预约小程序系统设计和实现(源码+论文)
    目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......
  • 基于SpringBoot的实时音乐推荐与社交互动可视化平台设计和实现(源码+论文+部署讲解等)
     目录:目录:博主介绍: 完整视频演示:你应该选择我技术栈介绍:需求分析:系统各功能实现一览:1.注册2.登录部分代码参考: 项目功能分析: 项目论文:源码获取:博主介绍: ......
  • Vue2+ECharts+Mock.js实现前端后台通用管理系统页面
    一、前言  在现代Web开发中,前端框架与数据可视化工具的结合能够显著提升用户体验。本文将介绍如何使用Vue2和ECharts构建一个通用的后台管理系统页面。利用Vue2的组件化特性,可以高效管理应用状态与UI交互,而ECharts则提供多样的图表类型,便于展示数据分析结果。通过整合这两......
  • 基于Spring boot的大学生选课信息可视化系统设计和实现(源码+论文+部署讲解等)
    博主介绍: ......