vue官网例子 讲解2
unref() 是什么unref()是 Vue 3 提供的一个辅助工具函数它的核心作用可以概括为“如果是 ref 就取值不是 ref 就直接返回”。你可以把它看作是.value的智能语法糖用来解决“不确定变量是否为 ref”时的取值问题。1. 核心逻辑unref(val)的内部逻辑非常简单等价于下面这行代码// unref 的伪代码逻辑constresultisRef(val)?val.value:val如果传入的是ref它会自动返回ref.value即内部存储的真实值。如果传入的是普通值它会直接返回该值本身。2. 为什么要用它使用场景在封装通用函数或**组合式函数Composables**时unref非常有用。假设你正在写一个通用的useFeature函数它接收一个参数input。你希望这个函数足够灵活既能接收ref(1)也能接收普通数字1。如果不使用unref你需要这样写很麻烦import{isRef}fromvuefunctionuseFeature(input){// 必须先判断类型再决定怎么取值constvalueisRef(input)?input.value:input console.log(value)}使用unref代码会非常简洁import{unref}fromvuefunctionuseFeature(input){// 无论 input 是 ref 还是普通值都能直接拿到真实数据constvalueunref(input)console.log(value)}3. 代码示例import{ref,unref}fromvueconstmyRefref(100)constmyNum50// ✅ 场景 1传入 ref自动解包console.log(unref(myRef))// 输出: 100 (等同于 myRef.value)// ✅ 场景 2传入普通值直接返回console.log(unref(myNum))// 输出: 504. 注意事项失去响应性unref()只是获取当前的值快照。如果你把unref(myRef)的结果赋值给另一个变量这个新变量不会随myRef的变化而更新。如果你需要保持响应式连接请直接使用ref本身不要解包。模板中不需要在 Vue 的模板template中Vue 会自动帮你解包ref所以模板里直接使用{{ count }}即可不需要写{{ unref(count) }}。总结当你写代码时不确定手里的变量是不是ref或者想让函数同时兼容ref和普通值时用unref()是最安全、最简洁的选择。