首页 > 其他分享 >vue3 ref和reactive原理区别

vue3 ref和reactive原理区别

时间:2024-08-01 22:08:14浏览次数:8  
标签:劫持 数据类型 reactive vue3 ref 监听 赋值

概述

  • ref是通过一个中间对象RefImpl持有数据,并通过重写它的set和get方法实现数据劫持的,本质上依旧是通过Object.defineProperty 对RefImpl的value属性进行劫持。

  • reactive则是通过Proxy进行劫持的。Proxy无法对基本数据类型进行操作,进而导致reactive在面对基本数据类型时的束手无策。

ref 对基本数据类型,使用Object.defineProperty 进行数据劫持监听,对对象数据使用value包装proxy对象进行监听劫持数据

reactive 监听的对象数据需要使用Object.assign 的方式进行复制,或者对子属性直接赋值
如果直接重新赋值reactive变量的话,变量会失去响应式。

ref的value无论对象还是基本数据类型,重新赋值都能实现响应式,所以一般推荐ref 监听对象数据,可以直接赋值。

标签:劫持,数据类型,reactive,vue3,ref,监听,赋值
From: https://www.cnblogs.com/jocongmin/p/18337675

相关文章

  • android IO Prefetch源码分析
    I/OPrefetcher是高通本身提供的一套优化方案,可以用在Android手机App冷启动的时候。本文基于androidQ主要分libqti-iopd、[email protected]、libqti-iopd-client_system、libqti-perfd-client_system、libperfconfig、libqti_performance,编译后在/vendor/lib/目......
  • Vue3+Ts+Vite入门
    vue2采用的是vueRouter3vueX3(233)vue3采用的是vueRouter4vueX4(344)v3对比v2优点1.首次渲染更加快v2就算通过路由懒加载效率也不是非常高(查找各种依赖)v3通过vite构建工具使渲染速度更快2.diff算法更快v2新旧虚拟dom对比然后差异化更新v3对diff算法进行优......
  • 超简单!vue3+vant4+pinia+vue-router+mockjs移动端实现水果商城项目【原创】
    ......
  • BGP 属性local_preference 本地优先
     BGP本地优先属性公认非必遵属性;当一条BGP路由器中存在多条去往同一目标网络的BGP路由时,BGP协议会对这些BGP路由属性进行比较,从而筛选出最佳到达目标网络的通达路径;本地优先属性,只在IBGP对等体之间进行交换,即:同一AS内进行,不会通告给AS域外;......
  • VUE3 el-Menu + tabs 联动
    我们在项目中会有这种情况,根据点击侧边栏的菜单,来动态实现右侧tabs的增减,那么这种效果怎么实现呢1.模板部分<el-menu:collapse="isCollapse"active-text-color="#ffd04b"background-color="#242424"class="el-menu-vertical-demo":default-active="onRoutes&qu......
  • 4、vue3总组件/入口文件/路由设置
    1、安装element-plus依赖包npmielement-plus 2、项目主组件修改(App.vue)<scriptlang="ts"setup>import{ElConfigProvider}from'element-plus'import{ElDialog}from"element-plus"//将ElementPlus的语言设置为中文importzhCnfrom&......
  • Vue3选择框选择不同的值输入框刷新变化
    场景:新增的时候根据选择框的不同来改变输入信息例如:实现方式:这个输入框我做的是业务字典实际的值是0和1,在点击选择框的时候用v-if判断选择的值是1还是0,如果是0则是一个输入信息,如果是1则又是另一个输入信息。实现代码片: <el-row:span="24"v-if="formData.courseTyp......
  • SpringCloud+Vue3主子表插入数据(芋道)
    目的:多表联查获取到每个班级里面所有的学生上课的信息。点击消课插入到消课主表和消课子表,主表记录班级信息,消课人员信息,上课时间。子表记录上课学员的信息,学员姓名、手机号、班级名称、班级类型、上课时间、老师名称前端:<template><Dialog:title="dialogTitle"v-mode......
  • Selenium“没有提供‘moz:firefoxOptions.binary’功能,并且在命令行上没有设置二进制
    我一直在尝试将python脚本移植到我的wsl/bash编码中心中。我继续收到此错误:Traceback(mostrecentcalllast):File"/path/to/my/file.py",line20,in<module>driver=webdriver.Firefox(service=FirefoxService(GeckoDriverManager().install()))Fil......
  • vue3 自定义渲染,渲染函数实现,配置渲染render函数,低代码配置自定义渲染函数核心实现
    代码父组件<template><divclass="component-name"><!--全局自动的icon--><Extend:render="render"/></div></template><scriptsetuplang="ts">import{ref,reac......