vue3中的ref相关的api及用法

360影视 2025-02-05 22:18 3

摘要:import { reactive, toRef } from 'vue';const state = reactive({count: 0});const countRef = toRef(state, 'count'); //

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

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

用法示例:

import { ref } from 'vue';const count = ref(0);const increment = => {count.value++; // 访问和修改 ref 需要使用 `.value`};

当前计数:{{ count }}

增加

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

用法示例:

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};

当前计数:{{ countRef }}

增加

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

用法示例:

import { reactive, toRefs } from 'vue';const state = reactive({count: 0,message: 'Hello Vue3'});const { count, message } = toRefs(state); // 结构赋值的每个属性都是 ref

计数:{{ count }}

消息:{{ message }}

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

用法示例:

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

计数:{{ obj.count }}

增加

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

用法示例(防抖 ref):

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);

搜索内容:{{ searchQuery }}

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

用法示例:

import { ref, unref } from 'vue';const count = ref(10);console.log(unref(count)); // 10

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

用法示例:

import { ref, isRef } from 'vue';const count = ref(0);console.log(isRef(count)); // trueconsole.log(isRef(100)); // false

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

用法示例:

import { shallowRef, triggerRef } from 'vue';const obj = shallowRef({ count: 0 });const forceUpdate = => {obj.value.count++; // 不会触发更新triggerRef(obj); // 强制触发更新};

计数:{{ obj.count }}

强制更新

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

来源:小康说科技

相关推荐