Vue 3 中如何使用 Composition API 实现组件间的逻辑复用?

Vue 3 中如何使用 Composition API 实现组件间的逻辑复用?

回答:
在 Vue 3 中,可以通过自定义组合式函数(Composable Functions)来实现组件间的逻辑复用。这些函数通常以 use 开头(如 useMouse、useFetch),内部使用 ref、reactive、computed、watch 等响应式 API 封装特定逻辑,并返回需要暴露给组件的状态或方法。

示例:

// composables/useCounter.js
import { ref, computed } from 'vue'

export function useCounter(initialValue = 0) {
  const count = ref(initialValue)
  const double = computed(() => count.value * 2)

  function increment() {
    count.value++
  }

  function reset() {
    count.value = initialValue
  }

  return { count, double, increment, reset }
}

在组件中使用:

<!-- MyComponent.vue -->
<script setup>
import { useCounter } from '@/composables/useCounter'

const { count, double, increment, reset } = useCounter(10)
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <p>Double: {{ double }}</p>
    <button @click="increment">+</button>
    <button @click="reset">Reset</button>
  </div>
</template>

解析:

  • Composition API 的核心优势之一是逻辑复用能力,相比 Vue 2 的 mixins,composables 更清晰、无命名冲突、类型推导友好(尤其在 TypeScript 中)。
  • 自定义组合函数本质上是普通 JavaScript 函数,但依赖 Vue 的响应式系统,因此必须在 setup() 或 <script setup> 中调用(即在组件上下文内)。
  • 多个组件可以复用同一个 composable,每个实例拥有独立的状态(因为每次调用都会创建新的 ref 和响应式对象)。
  • 这种模式类似于 React 中的自定义 Hook,是现代前端框架中逻辑复用的主流方式。

发表评论 (审核通过后显示评论):

昵称:
邮箱:
内容: