在 Vue2 中,为了让一个响应式数据,我们需要使用 Vue.observable 或 Vue.observableRef 来创建一个可观察的对象。Vue3 中,提供了两种新的响应式类型,即 ref 和 reactive。
- ref:用于创建一个响应式引用,将普通变量包装为响应式数据。ref 返回的是一个简单对象,该对象有一个 value 属性,用于获取和修改值。可以通过 .value 访问和修改它的值。
- reactive:用于创建一个响应式对象,将普通的 JavaScript 对象转换为响应式对象。reactive 返回的是一个拦截器对象,当访问或修改属性时会触发相应的更新。
下面是一个简单的代码演示:
import { ref, reactive } from 'vue'
// 使用 ref 创建一个响应式引用
const count = ref(0)
console.log(count.value) // 输出: 0
count.value++ // 修改值
console.log(count.value) // 输出: 1
// 使用 reactive 创建一个响应式对象
const state = reactive({
username: 'John',
age: 25
})
console.log(state.username) // 输出: John
state.age++ // 修改属性值
console.log(state.age) // 输出: 26
使用 ref 和 reactive 创建的数据,在模板中使用时,可以直接使用它们的值,不需要通过 .value 来访问。例如:
<template>
<div>
<p>Count: {{ count }}</p>
<p>Username: {{ state.username }}</p>
<p>Age: {{ state.age }}</p>
</div>
</template>
<script>
import { ref, reactive } from 'vue'
export default {
setup() {
const count = ref(0)
const state = reactive({
username: 'John',
age: 25
})
return {
count,
state
}
}
}
</script>