Vue3:详解toRefs
·
它是什么?
toRefs 把reactive 对象变成能解构的响应式对象。解构出来的每个属性都是 ref
解决了什么问题?
直接解构 reactive 对象会丢失响应式:
const state = reactive({ name: '张三', age: 25 })
// ❌ 直接解构 - 响应式丢失
const { name, age } = state
state.name = '李四' // name 不会变!
// ✅ 使用 toRefs - 保持响应式
const { name, age } = toRefs(state)
state.name = '李四' // name.value 同步更新!
核心用法
在 setup 函数中
import { reactive, toRefs } from 'vue'
export default {
setup() {
const state = reactive({
name: '张三',
age: 25
})
return {
...toRefs(state) // 模板中可以直接用 {{name}} {{age}}
}
}
}
在组合式函数中
function useCounter() {
const state = reactive({
count: 0,
double: computed(() => state.count * 2)
})
return {
...toRefs(state), // 使用者可以安全解构
increment: () => state.count++
}
}
// 使用
const { count, double, increment } = useCounter()
重要特性
- 保持连接:修改 ref 或原对象,两边都会同步更新
- 模板自动解包:模板里直接用
{{name}},不需要.value - JS 中需要 .value:在 JavaScript 代码里要写
name.value
使用场景
- 从 setup 返回数据给模板用
- 组合式函数返回多个响应式数据
- 需要解构 reactive 对象但不想丢响应式
一句话:想解构 reactive 对象又不丢响应式,就用 toRefs。
更多推荐

所有评论(0)