vue3中的ref相关的api及用法

在 Vue 3 中,ref 相关的 API 主要用于管理响应式数据。以下是 ref 相关的 API 及其用法:


1. ref

ref 用于创建响应式的基本数据类型对象

用法示例:

<script setup>
import { ref } from 'vue';

const count = ref(0);

const increment = () => {
  count.value++; // 访问和修改 ref 需要使用 `.value`
};
</script>

<template>
  <div>
    <p>当前计数:{
  
  { count }}</p>
    <button @click="increment">增加</button>
  </div>
</template>

2. toRef

toRef 用于将响应式对象的某个属性创建为 ref,从而保持与原对象的绑定。

用法示例:

<script setup>
import { reactive, toRef } from 'vue';

const state = reactive({
  count: 0
});

const countRef = toRef(state, 'count'); // countRef 和 state.count 绑定

const increment = () => {
  countRef.value++; // 修改 countRef.value 也会修改 state.count
};
</script>

<template>
  <div>
    <p>当前计数:{
  
  { countRef }}</p>
    <button @click="increment">增加</button>
  </div>
</template>

3. toRefs

toRefs 用于将整个响应式对象的所有属性转换为 ref,适用于结构赋值场景。

用法示例:

<script setup>
import { reactive, toRefs } from 'vue';

const state = reactive({
  count: 0,
  message: 'Hello Vue3'
});

const { count, message } = toRefs(state); // 结构赋值的每个属性都是 ref
</script>

<template>
  <div>
    <p>计数:{
  
  { count }}</p>
    <p>消息:{
  
  { message }}</p>
  </div>
</template>

4. shallowRef

shallowRef 创建浅层响应式,仅对 .value 本身进行响应式处理,而不深度追踪对象内部的变化。

用法示例:

<script setup>
import { shallowRef } from 'vue';

const obj = shallowRef({ count: 0 });

const update = () => {
  obj.value.count++; // 不会触发视图更新
  obj.value = { count: obj.value.count }; // 需要重新赋值整个对象才会更新
};
</script>

<template>
  <div>
    <p>计数:{
  
  { obj.count }}</p>
    <button @click="update">增加</button>
  </div>
</template>

5. customRef

customRef 创建自定义的 ref,用于控制数据的读取存储逻辑(如防抖或节流)。

用法示例(防抖 ref):

<script setup>
import { ref, customRef } from 'vue';

function useDebouncedRef(value, delay = 300) {
  let timeout;
  return customRef((track, trigger) => {
    return {
      get() {
        track(); // 追踪依赖
        return value;
      },
      set(newValue) {
        clearTimeout(timeout);
        timeout = setTimeout(() => {
          value = newValue;
          trigger(); // 触发更新
        }, delay);
      }
    };
  });
}

const searchQuery = useDebouncedRef('', 500);
</script>

<template>
  <input v-model="searchQuery" placeholder="输入搜索内容" />
  <p>搜索内容:{
  
  { searchQuery }}</p>
</template>

6. unref

unref 直接获取 ref 的值,无需使用 .value

用法示例:

<script setup>
import { ref, unref } from 'vue';

const count = ref(10);

console.log(unref(count)); // 10
</script>

7. isRef

isRef 用于检查一个变量是否为 ref

用法示例:

<script setup>
import { ref, isRef } from 'vue';

const count = ref(0);

console.log(isRef(count)); // true
console.log(isRef(100)); // false

8. triggerRef

triggerRef 强制触发 shallowRef 的视图更新。

用法示例:

<script setup>
import { shallowRef, triggerRef } from 'vue';

const obj = shallowRef({ count: 0 });

const forceUpdate = () => {
  obj.value.count++; // 不会触发更新
  triggerRef(obj); // 强制触发更新
};
</script>

<template>
  <div>
    <p>计数:{
  
  { obj.count }}</p>
    <button @click="forceUpdate">强制更新</button>
  </div>
</template>

总结

API作用
ref(value)创建响应式数据(基本类型或对象)
toRef(obj, key)将对象的某个属性转为 ref
toRefs(obj)将整个对象的属性转为 ref
shallowRef(value)创建浅层响应式 ref
customRef((track, trigger) => {...})创建自定义 ref
unref(ref)获取 ref 的值(等价于 ref.value
isRef(value)判断是否为 ref
triggerRef(ref)强制触发 shallowRef 更新

这些 API 能够帮助你在 Vue 3 中高效管理响应式数据。你在实际项目中有遇到相关问题吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/964956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

视频融合平台EasyCVR无人机场景视频压缩及录像方案

安防监控视频汇聚EasyCVR平台在无人机场景中发挥着重要的作用&#xff0c;通过高效整合视频流接入、处理与分发等功能&#xff0c;为无人机视频数据的实时监控、存储与分析提供了全面支持&#xff0c;广泛应用于安防监控、应急救援、电力巡检、交通管理等领域。 EasyCVR支持GB…

【力扣】240.搜索二维矩阵 II

题目 我的代码 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {for(int i0;i<matrix.size();i){for(int j0;j<matrix[0].size();j){if(targetmatrix[i][j]){return true;}else if(target<matrix[i][j]){brea…

数据库备份、主从、集群等配置

数据库备份、主从、集群等配置 1 MySQL1.1 docker安装MySQL1.2 主从复制1.2.1 主节点配置1.2.2 从节点配置1.2.3 创建用于主从同步的用户1.2.4 开启主从同步1.2.4 主从同步验证 1.3 主从切换1.3.1 主节点设置只读&#xff08;在192.168.1.151上操作&#xff09;1.3.2 检查主从数…

intra-mart实现简易登录页面笔记

一、前言 最近在学习intra-mart框架&#xff0c;在此总结下笔记。 intra-mart是一个前后端不分离的框架&#xff0c;开发时主要用的就是xml、html、js这几个文件&#xff1b; xml文件当做配置文件&#xff0c;html当做前端页面文件&#xff0c;js当做后端文件&#xff08;js里…

Beans模块之工厂模块注解模块CustomAutowireConfigurer

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

javaEE-8.JVM(八股文系列)

目录 一.简介 二.JVM中的内存划分 JVM的内存划分图: 堆区:​编辑 栈区:​编辑 程序计数器&#xff1a;​编辑 元数据区&#xff1a;​编辑 经典笔试题&#xff1a; 三,JVM的类加载机制 1.加载: 2.验证: 3.准备: 4.解析: 5.初始化: 双亲委派模型 概念: JVM的类加…

【多线程】线程池核心数到底如何配置?

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…

js-对象-JSON

JavaScript自定义对象 JSON 概念: JavaScript Object Notation&#xff0c;JavaScript对象标记法. JSON 是通过JavaScript 对象标记法书写的文本。 由于其语法简单&#xff0c;层次结构鲜明&#xff0c;现多用于作为数据载体&#xff0c;在网络中进行数据传输. json中属性名(k…

基于 SpringBoot3 的 SpringSecurity6 + OAuth2 自定义框架模板

&#x1f516;Gitee 项目地址&#xff1a; 基于SpringBoot3的 SpringSecurity6 OAuth2 自定义框架https://gitee.com/MIMIDeK/MySpringSecurityhttps://gitee.com/MIMIDeK/MySpringSecurityhttps://gitee.com/MIMIDeK/MySpringSecurity

大模型综述一镜到底(全文八万字) ——《Large Language Models: A Survey》

论文链接&#xff1a;https://arxiv.org/abs/2402.06196 摘要&#xff1a;自2022年11月ChatGPT发布以来&#xff0c;大语言模型&#xff08;LLMs&#xff09;因其在广泛的自然语言任务上的强大性能而备受关注。正如缩放定律所预测的那样&#xff0c;大语言模型通过在大量文本数…

Django视图与URLs路由详解

在Django Web框架中&#xff0c;视图&#xff08;Views&#xff09;和URLs路由&#xff08;URL routing&#xff09;是Web应用开发的核心概念。它们共同负责将用户的请求映射到相应的Python函数&#xff0c;并返回适当的响应。本篇博客将深入探讨Django的视图和URLs路由系统&am…

位置-速度双闭环PID控制详解与C语言实现

目录 概述 1 控制架构解析 1.1 级联控制结构 1.2 性能对比 2 数学模型 2.1 位置环(外环) 2.2 速度环(内环) 3 C语言完整实现 3.1 控制结构体定义 3.2 初始化函数 3.3 双环计算函数 4 参数整定指南 4.1 整定步骤 4.2 典型参数范围 5 关键优化技术 5.1 速度前馈 …

亚博microros小车-原生ubuntu支持系列:22 物体识别追踪

背景知识 跟上一个颜色追踪类似。也是基于opencv的&#xff0c;不过背后的算法有很多 BOOSTING&#xff1a;算法原理类似于Haar cascades (AdaBoost)&#xff0c;是一种很老的算法。这个算法速度慢并且不是很准。MIL&#xff1a;比BOOSTING准一点。KCF&#xff1a;速度比BOOST…

低至3折,百度智能云千帆宣布全面支持DeepSeek-R1/V3调用

DeepSeek-R1和 DeepSeek-V3模型已在百度智能云千帆平台上架 。 出品|产业家 新年伊始&#xff0c;百度智能云又传来新动作 。 2月3日百度智能云宣布&#xff0c; DeepSeek-R1和 DeepSeek-V3模型已在百度智能云千帆平台上架&#xff0c;同步推出超低价格方案&#xff0c;并…

Deepseek技术浅析(四):专家选择与推理机制

DeepSeek 是一种基于**专家混合模型&#xff08;Mixture of Experts, MoE&#xff09;**的先进深度学习架构&#xff0c;旨在通过动态选择和组合多个专家网络&#xff08;Expert Networks&#xff09;来处理复杂的任务。其核心思想是根据输入数据的特征&#xff0c;动态激活最合…

go运算符

内置运算符 算术运算符关系运算符逻辑运算符位运算符赋值运算符 算术运算符 注意&#xff1a; &#xff08;自增&#xff09;和–&#xff08;自减&#xff09;在 Go 语言中是单独的语句&#xff0c;并不是运算符 package mainimport "fmt"func main() {fmt.Printl…

分享2款 .NET 开源且强大的翻译工具

前言 对于程序员而言永远都无法逃避和英文打交道&#xff0c;今天大姚给大家分享2款 .NET 开源、功能强大的翻译工具&#xff0c;希望可以帮助到有需要的同学。 STranslate STranslate是一款由WPF开源的、免费的&#xff08;MIT License&#xff09;、即开即用、即用即走的翻…

技术书籍写作与编辑沟通指南

引言 撰写技术书籍不仅仅是知识的输出过程&#xff0c;更是与编辑团队紧密合作的协同工作。优秀的技术书籍不仅依赖作者深厚的技术背景&#xff0c;还需要精准的表达、流畅的结构以及符合出版要求的编辑润色。因此&#xff0c;如何高效地与编辑沟通&#xff0c;确保书籍质量&a…

Linux中系统相关指令(一)

一、时间查看指令date 1.1时间显示的格式 1> 默认格式&#xff0c;直接输入&#xff1a; date 回车 会直接展示出来&#xff0c;如&#xff1a; 2> 常用格式&#xff1a;年-月-日 时&#xff1a;分&#xff1a;秒 这种格式更加贴近于我们的习惯&#xff0c;但需要…