在 Vue 3 中,ref
用于创建响应式的引用(references),它总是返回一个包装对象,这个对象的 .value
属性包含了真正的响应式值。
在以下情况下,需要使用 .value
:
-
在 JavaScript/TypeScript 代码中直接访问或修改
ref
创建的响应式变量的值:
当你在setup
函数或组件的其他方法、计算属性等地方直接操作ref
创建的响应式变量时,你需要通过.value
来访问或修改其值。import { ref } from 'vue'; const count = ref(0); // 访问值 console.log(count.value); // 输出: 0 // 修改值 count.value++; console.log(count.value); // 输出: 1
-
在
watch
或watchEffect
中观察ref
创建的响应式变量:
在观察ref
创建的响应式变量时,你同样需要通过.value
来访问其值。import { ref, watch } from 'vue'; const count = ref(0); watch(count, (newVal, oldVal) => { console.log(`Count changed from ${oldVal.value} to ${newVal.value}`); });
在以下情况下,不需要使用 .value
:
-
在 Vue 模板中:
当你在 Vue 的模板中引用ref
创建的响应式变量时,Vue 会自动为你解包(unwrap)这个值,所以你不需要使用.value
。<template> <p>{{ count }}</p> <!-- Vue 会自动解包 ref 的值,不需要 .value --> </template>
-
在
setup
函数的返回值中:
当你在setup
函数中返回一个响应式变量给模板时,你不需要使用.value
。Vue 会自动处理这些响应式变量,使它们在模板中可用。import { ref } from 'vue'; export default { setup() { const count = ref(0); return { count // 不需要写 count.value }; } };
-
在
computed
计算属性中:
当你在setup
函数中使用computed
创建计算属性,并引用ref
创建的响应式变量时,你不需要使用.value
。Vue 会自动处理这些依赖关系。
总的来说,当你在 Vue 的模板或 setup
函数的返回值中引用 ref
创建的响应式变量时,不需要使用 .value
。但在 JavaScript/TypeScript 代码中直接操作这些变量时,你需要通过 .value
来访问或修改其值。