vue官网例子 讲解2

unref() 是什么

unref() 是 Vue 3 提供的一个辅助工具函数 ,它的核心作用可以概括为:"如果是 ref 就取值,不是 ref 就直接返回"

你可以把它看作是 .value智能语法糖,用来解决"不确定变量是否为 ref"时的取值问题。

1. 核心逻辑

unref(val) 的内部逻辑非常简单,等价于下面这行代码:

javascript 复制代码
// unref 的伪代码逻辑
const result = isRef(val) ? val.value : val
  • 如果传入的是 ref :它会自动返回 ref.value(即内部存储的真实值)。
  • 如果传入的是普通值:它会直接返回该值本身。

2. 为什么要用它?(使用场景)

在封装通用函数 或**组合式函数(Composables)**时,unref 非常有用。

假设你正在写一个通用的 useFeature 函数,它接收一个参数 input。你希望这个函数足够灵活:既能接收 ref(1),也能接收普通数字 1

如果不使用 unref,你需要这样写(很麻烦):

javascript 复制代码
import { isRef } from 'vue'

function useFeature(input) {
  // 必须先判断类型,再决定怎么取值
  const value = isRef(input) ? input.value : input
  console.log(value)
}

使用 unref,代码会非常简洁:

javascript 复制代码
import { unref } from 'vue'

function useFeature(input) {
  // 无论 input 是 ref 还是普通值,都能直接拿到真实数据
  const value = unref(input)
  console.log(value)
}

3. 代码示例

javascript 复制代码
import { ref, unref } from 'vue'

const myRef = ref(100)
const myNum = 50

// ✅ 场景 1:传入 ref,自动解包
console.log(unref(myRef)) // 输出: 100 (等同于 myRef.value)

// ✅ 场景 2:传入普通值,直接返回
console.log(unref(myNum)) // 输出: 50

4. 注意事项

  • 失去响应性unref() 只是获取当前的值 (快照)。如果你把 unref(myRef) 的结果赋值给另一个变量,这个新变量不会myRef 的变化而更新。如果你需要保持响应式连接,请直接使用 ref 本身,不要解包。
  • 模板中不需要 :在 Vue 的模板(<template>)中,Vue 会自动帮你解包 ref,所以模板里直接使用 {``{ count }} 即可,不需要写 {``{ unref(count) }}

总结 :当你写代码时不确定手里的变量是不是 ref,或者想让函数同时兼容 ref 和普通值时,用 unref() 是最安全、最简洁的选择。

相关推荐
NiceCloud喜云8 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
wordbaby9 小时前
React Native + RNOH:跨页面数据回传的最佳实践与避坑指南
前端·react native
GISer_Jing9 小时前
Three.js着色器编译机制深度解析
javascript·webgl·着色器
丷丩9 小时前
MapLibre GL JS第22课:查看本地GeoJSON
前端·javascript·map·mapbox·maplibre gl js
油炸自行车9 小时前
Claude Code 错误:API Error: 400 Failed to deserialize the JSON body into the
开发语言·javascript·json·trae·claude code·api error 400
Front思10 小时前
AI前端工程师需要具备能力+
前端·人工智能·ai
ZC跨境爬虫12 小时前
跟着 MDN 学CSS day_29:(掌握文本与字体样式的核心艺术)
前端·css·ui·html·tensorflow
李子琪。12 小时前
网络空间安全深度实战:CSRF 漏洞原理剖析与基于 Token 的纵深防御体系构建(全栈实验报告)
前端·安全·csrf
冰暮流星12 小时前
javascript之history对象介绍
前端·笔记
IT_陈寒13 小时前
Vite热更新失灵?你可能漏了这个配置
前端·人工智能·后端