ref()函数
在Vue 3中,ref 函数是组合式 API (Composition API) 中用于创建响应式引用(reactive references)的一种方式。它可以用于定义响应式的数据,使得该数据在变化时会触发视图的重新渲染。
ref 函数的语法和使用
引入 **ref** 函数
javascript
import { ref } from 'vue';- 创建一个响应式引用
ref 函数可以接受一个初始值,并返回一个包含该初始值的响应式引用对象。
javascript
const count = ref(0);- 访问和修改响应式引用的值
创建的响应式引用对象有一个 .value 属性,用于访问和修改其值。
javascript
const count = ref(0);
console.log(count.value); // 输出: 0
count.value++;
console.log(count.value); // 输出: 1在 Vue 组件中使用 ref
下面是一个完整的示例,包括导入、创建响应式引用、绑定到模板和处理事件:
vue
<template>
<div>
<h1>{{ title }}</h1>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
</div>
</template>
<script setup>
import { ref } from 'vue';
// 创建响应式引用
const title = ref('Hello Vue 3!');
const count = ref(0);
// 方法:增加计数器
const increment = () => {
count.value++;
};
</script>ref 与 reactive 的区别
**ref**:用于简单类型(如数字、字符串、布尔值)以及对象类型。通过.value访问和修改值。**reactive**:用于创建嵌套对象的响应式状态,返回的对象是一个响应式代理,不需要通过.value访问属性。
- 示例:使用
**reactive**
javascript
import { reactive } from 'vue';
const state = reactive({
count: 0,
title: 'Hello Vue 3!'
});
console.log(state.count); // 0
state.count++;
console.log(state.count); // 1- 何时使用
**ref**和**reactive**
- 使用
ref来处理原始值(如数字、字符串、布尔值)以及需要单独处理某个对象引用的情况。 - 使用
reactive来处理嵌套对象以及需要对整个对象进行响应式处理的情况。
- 示例:混合使用
**ref**和**reactive**
在实际项目中,可以混合使用 ref 和 reactive 来满足不同的需求:
vue
<template>
<div>
<h1>{{ state.title }}</h1>
<p>Count: {{ state.count }}</p>
<button @click="increment">Increment</button>
<p>Message: {{ message }}</p>
</div>
</template>
<script setup>
import { ref, reactive } from 'vue';
// 创建响应式对象
const state = reactive({
count: 0,
title: 'Hello Vue 3!'
});
// 创建响应式引用
const message = ref('This is a reactive message.');
// 方法:增加计数器
const increment = () => {
state.count++;
};
</script>在这个示例中,state 是一个使用 reactive 创建的响应式对象,而 message 是一个使用 ref 创建的响应式引用。这样可以根据数据的性质选择最合适的响应式处理方式。
