JavaScript 语言 如何使用Vue 3 computed vs reactive vs ref

JavaScript阿木 发布于 22 天前 5 次阅读


Vue 3 中 computed、reactive 和 ref 的比较与使用

在 Vue 3 中,响应式系统是框架的核心特性之一,它允许开发者以声明式的方式处理数据变化。Vue 3 引入了一些新的响应式API,包括 `computed`、`reactive` 和 `ref`。这些API各有特点,适用于不同的场景。本文将深入探讨这三个概念,并通过代码示例来展示它们的使用方法。

前言

在 Vue 2 中,我们通常使用 `data` 函数来创建响应式数据。Vue 3 引入了 Composition API,它提供了一种更灵活的方式来组织组件逻辑。`computed`、`reactive` 和 `ref` 是 Composition API 中用于创建响应式数据的三个主要工具。

computed

`computed` 是基于它们的响应式依赖进行缓存的计算属性。只有当它的依赖发生变化时,它才会重新计算。这使得 `computed` 非常适合用于计算复杂逻辑。

reactive

`reactive` 用于创建一个响应式的对象。当对象中的属性发生变化时,依赖于这些属性的视图会自动更新。

ref

`ref` 用于创建一个响应式的引用,它返回一个对象,该对象具有 `.value` 属性。`ref` 通常用于基本类型的数据。

示例代码

以下是一个简单的示例,展示了如何使用 `computed`、`reactive` 和 `ref`。

javascript

<template>


<div>


<h1>Vue 3 Reactive vs Computed vs Ref</h1>


<p>Message: {{ message }}</p>


<p>Computed Full Name: {{ fullName }}</p>


<p>Reactive Full Name: {{ reactiveFullName }}</p>


<p>Ref Full Name: {{ refFullName }}</p>


</div>


</template>

<script>


import { ref, computed, reactive } from 'vue';

export default {


setup() {


// 使用 ref 创建响应式引用


const firstName = ref('John');


const lastName = ref('Doe');

// 使用 computed 创建计算属性


const fullName = computed(() => `${firstName.value} ${lastName.value}`);

// 使用 reactive 创建响应式对象


const user = reactive({


firstName: 'Jane',


lastName: 'Smith'


});

// 使用 computed 创建另一个计算属性


const reactiveFullName = computed(() => `${user.firstName} ${user.lastName}`);

// 使用 ref 创建另一个响应式引用


const refFullName = ref(`${firstName.value} ${lastName.value}`);

// 模拟数据变化


setTimeout(() => {


firstName.value = 'Alice';


lastName.value = 'Johnson';


user.firstName = 'Bob';


user.lastName = 'Brown';


}, 2000);

return {


message: 'Hello Vue 3!',


fullName,


reactiveFullName,


refFullName


};


}


};


</script>


使用场景

computed

- 当你需要基于多个响应式数据源进行复杂计算时,使用 `computed` 是最佳选择。

- 如果你需要缓存计算结果以避免不必要的计算,`computed` 也是一个好选择。

reactive

- 当你需要创建一个包含多个属性的对象,并且希望这些属性都是响应式的,使用 `reactive` 是合适的。

- `reactive` 适用于对象类型的数据。

ref

- 当你需要创建一个响应式的基本类型数据(如字符串、数字等),使用 `ref` 是最简单的方式。

- `ref` 适用于基本类型的数据。

总结

在 Vue 3 中,`computed`、`reactive` 和 `ref` 是三种不同的响应式API,它们各有用途。选择哪种API取决于你的具体需求。通过理解它们的区别和使用场景,你可以更有效地使用 Vue 3 的响应式系统。

本文通过代码示例展示了如何使用 `computed`、`reactive` 和 `ref`,并比较了它们的特点。希望这篇文章能帮助你更好地理解 Vue 3 的响应式系统。