首页 > 其他分享 >Vue3——定义响应式数据

Vue3——定义响应式数据

时间:2024-12-23 16:31:41浏览次数:3  
标签:定义 reactive 对象 数据 响应 let Vue3 ref

一、ref和reactive

ref:可定义基本类型数据和对象类型数据

reactive:只能定义对象类型数据

区别:

  ·ref创建的变量在script中使用时必须加上.value(可以使用volar插件自动添加.value,步骤:vscode设置->扩展->Vue->勾选Dot Value)

  ·reactive重新分配一个新对象,会失去响应式(可以用Object.assign去整体替换)

使用原则:

1.若需要一个基本类型的响应式数据,必须使用ref

2.若需要一个响应式对象,层级不深,ref/reactive都可以

3.若需要一个响应式对象,且层级比较深,建议使用reactive

  // ref
  // 基本类型
  let sum = ref(0); 
  // 对象类型
  let car = ref({
    brand: '奔驰',
    price: 100,
  })
  // reactive 只能声明对象类型
  let car = reactive({
    brand: '奔驰',
    price: 100,
  })

二、toRef和toRefs

作用:把响应式对象中的数据结构拿出来,且具备响应式(相当于把reactive/ref定义的对象中的每一组key/value都拿出来形成一个新的ref对象)

区别:toRefs取出对象中的所有数据,toRef一次取一个数据

let person = reactive({
  name: '张三',
  age: 18,
})

let car = ref({
  brand: '奔驰',
  price: 100,
})

let {brand, price} = toRefs(car.value);

// 用toRefs相当于把reactive/ref定义的person里面的每一组key/value都拿出来形成一个新的ref对象
let {name, age} = toRefs(person); // 现在相当于name和age都是ref响应式数据

// toRef相当于把person里面的数据一个一个取出来,也是生成ref响应式数据
let nl = toRef(person, 'age');

  

三、其他API:shallowRef和shallowReactive(创建浅层)

shallowRef:

作用:创建一个响应式数据,但只对顶层属性进行响应式处理(针对比较大的数据,且只关注整体更改时用shallowRef效率会更高)

用法:

let myVar = shallowRef(initialValue);

特点:只跟踪引用值的变化,不关心值内部的属性变化

shallowReactive:

作用:创建一个浅层响应式对象,只会使对象的最顶层属性变成响应式的,对象内部的嵌套属性则不会变成响应式的

用法:

const myObj = shallowReactive({...})

特点:对象的顶层属性是响应式的,但嵌套对象的属性不是

总结:通过使用shallowRef()和shallowReactive()来绕开深度响应。浅层式API创建的状态只在其顶层是响应式的,对所有深层的对象不会做任何处理,避免了对每一个内部属性做响应式所带来的性能消耗,这让属性的访问变得更快,可以提升性能。

标签:定义,reactive,对象,数据,响应,let,Vue3,ref
From: https://www.cnblogs.com/wyl-k/p/18619655

相关文章

  • Vue3封装一个Element的自定义上传组件
    封装一个ElementPlus的自定义上传组件写在前面,工作中要封装一个文件上传组件,想着以后肯定也能用得到,就给记录了下来文章通篇借鉴的是这位大佬的,有需要的可以去看看https://blog.51cto.com/u_15295608/3527047直接上代码:先看样式:就是这样子了!!!,这是个弹窗的形式,有空我再整......
  • zabbix自定义监控项
    只要zabbix-get能得到的数据zabbix-server就能得到执行脚本之一#cat /etc/zabbix/zabbix_agentd.d/tcp_conn_plugin.sh#!/bin/bash#author:songxiaomintcp_conn_status(){  TCP_STAT=$1  ss-ant|awk'NR>1{++s[$1]}END{for(kins)printk,s[k]}'......
  • 【阿尼亚探索大模型】书生大模型实战营-进阶岛第2关(L2G2000)Lagent 自定义你的 Agent
    任务类型任务内容任务一使用Lagent复现“制作一个属于自己的Agent”任务二使用Lagent复现 “Multi-Agents博客写作系统的搭建”任务三将你的Agent部署到HuggingFace或ModelScope平台基础环境配置依然选择30%A100开发机进行实验。使用conda创建虚拟环境。启动......
  • Django 模型管理器中自定义方法和添加导出功能
    在Django中,模型管理器提供了一种扩展模型行为的方式。您可以重写或添加自定义方法,以满足特定的业务需求。在本文中,我们将探讨如何在模型管理器中自定义方法,并提供一些常见的用例。此外,我们还将介绍如何在管理员界面中添加导出数据为CSV文件的功能。什么是模型管理......
  • 自定义多层级zip解压工具
    自定义多层级zip解压工具前言项目中偶然需要,希望能处理嵌套的压缩包,但是又不希望把文件解压处理。原本不希望重复造轮子,但没有发现很好用的现成案例,就简单处理了一下。正文java做zip解压一般使用ZipFile​或者ZipInputStream​。在实际使用中,遇到了zip清单属......
  • 使用HTML5自定义一个复选框
    在HTML5中,虽然我们不能直接自定义原生的复选框样式,但我们可以使用一些技巧来模拟自定义复选框。以下是一个简单的示例,说明如何使用HTML、CSS和JavaScript来创建一个自定义复选框。HTML:<labelclass="custom-checkbox"><inputtype="checkbox"hidden><spanclass="ch......
  • 使用HTML5自定义一个下拉框
    在HTML5中,你可以使用原生的<select>和<option>元素来创建下拉框,但如果你想自定义其样式和行为,你可能需要使用一些额外的HTML、CSS和JavaScript。以下是一个简单的示例,展示如何使用HTML、CSS和JavaScript创建一个自定义的下拉框:HTML<divclass="custom-dropdown"><inputtype......
  • 在鸿蒙NEXT中实现完全自定义导航栏
    在日常app开发中,导航栏扮演着重要的角色。鸿蒙提供了系统导航栏Navigation,它支持很多属性的修改,但是应用需求更加灵活多变,比如有的导航栏有背景图片,有的导航栏要求渐变色,有的导航栏需要随时隐藏和显示等等。遇到这些需求系统的Navigation就无法实现,这时候我们就需要自定义导航栏......
  • 编写程序,利用指针实现排序(指针专题)。将输入的四个整数按由大到小的顺序输出。 已定义
    #include<stdio.h>voidswap(int*pa,int*pb){   intt;   t=*pa;*pa=*pb;*pb=t;}intmain(){   intarr[4]={0};   inti,j,n=4;   for(i=0;i<4;i++)   {       scanf("%d",&arr[i]);   }   ......
  • 【静态网页模板源码】000023 建筑工作室网站-响应式 (附源码)
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......