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() 是最安全、最简洁的选择。

相关推荐
假如让我当三天老蒯1 分钟前
Options API(选项式 API) 和 Composition API(组合式 API)
前端·vue.js·面试
SameX2 分钟前
iOS 独立开发实践:用 MapKit + 像素渲染实现 Citywalk 轨迹地图 App「雁过留痕」
前端
_柳青杨3 分钟前
一文吃透 Node.js 事件循环:从原理到 Node 20+ 重大变更
javascript·后端
skyey19 分钟前
页面加载时,深色模式闪白的问题解决
前端
IT_陈寒29 分钟前
Java 并行流把我坑惨了,这6小时加班值了
前端·人工智能·后端
anOnion10 小时前
构建无障碍组件之Menu Button pattern
前端·html·交互设计
用户479492835691510 小时前
claude Fable用不了?把Gpt 5.5pro接到你的claude code里
前端·后端
JieE21211 小时前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
冬奇Lab13 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
zhangxingchao13 小时前
Kotlin常用的Flow 操作符整理
前端