vue3中的ref相关的api及用法

embedded/2025/2/7 23:00:53/

在 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 中高效管理响应式数据。你在实际项目中有遇到相关问题吗?


http://www.ppmy.cn/embedded/160404.html

相关文章

node.js使用mysql2对接数据库

一、引言 在现代Web开发中&#xff0c;Node.js作为一种高效、轻量级的JavaScript运行时环境&#xff0c;已经广泛应用于后端服务的开发中。而MySQL&#xff0c;作为一个广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;提供了强大的数据存储和查询功能…

[转]Java面试近一个月的面试总结

本文是在学习中的总结&#xff0c;欢迎转载但请注明出处&#xff1a;http://blog.csdn.net/pistolove/article/details/46753275 前言 打算换个工作&#xff0c;近一个月面试了不少的公司&#xff0c;下面将一些面试经验和思考分享给大家。另外校招也快要开始了&#xff0c;为…

maven如何不把依赖的jar打包到同一个jar?

spring boot项目打jar包部署&#xff1a; 经过以下步骤&#xff0c; 最终会形成maven依赖的多个jar&#xff08;包括lib下添加的&#xff09;、 我们编写的程序代码打成一个jar&#xff0c;将程序jar与 依赖jar分开&#xff0c;便于管理&#xff1a; success&#xff1a; 最终…

C++编程语言:抽象机制:模板(Bjarne Stroustrup)

目录 23.1 引言和概观(Introduction and Overview) 23.2 一个简单的字符串模板(A Simple String Template) 23.2.1 模板的定义(Defining a Template) 23.2.2 模板实例化(Template Instantiation) 23.3 类型检查(Type Checking) 23.3.1 类型等价(Type Equivalence) …

Java JDK17 API 离线文档下载

Java JDK17 API 离线文档下载 JavaJDK17API离线文档下载 本仓库提供了一个方便的资源文件下载&#xff0c;即 **Java JDK17 API 离线文档**。该文档是Java开发者在离线环境下查阅JDK17 API的必备工具。无论你是Java初学者还是经验丰富的开发者&#xff0c;这份离线文档都能帮助…

Windows编程:下载与安装 Visual Studio 2010

本节前言 在写作本节的时候&#xff0c;本来呢&#xff0c;我正在写的专栏&#xff0c;是 MFC 专栏。而 VS2010 和 VS2019&#xff0c;正是 MFC 学习与开发中&#xff0c;可以使用的两款软件。然而呢&#xff0c;如果你去学习 Windows API 知识的话&#xff0c;那么&#xff0…

代码随想录二刷|回溯2

回溯 组合问题 方法 组合 题干 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 思路 &#xff08;1&#xff09;定义全局变量数组&#xff0c;作为存放组合的数组和存放最终答案的数组 &#xff08;2&…

Golang: 对float64 类型的变量进行原子加法操作

func AddFloat64(val *float64, delta float64) (new float64) {for {old : *valnew old deltaif atomic.CompareAndSwapUint64((*uint64)(unsafe.Pointer(val)),math.Float64bits(old),math.Float64bits(new),) {break}}return } 这段 Go 语言的代码实现了一个并发安全的浮…