Vue

Composables

Vue 3 composables 解决的问题、使用方式和注意事项。

发布于 2026年5月30日0 views

Composables 是 Vue 3 复用逻辑的方式,通常以 use 开头。

解决什么问题

如果多个组件都有相同逻辑,比如分页、搜索、防抖、弹窗开关,就不适合复制粘贴。

可以把这些逻辑抽成 composable。

基本写法

import { ref } from "vue";

export function useDialog() {
  const open = ref(false);

  function show() {
    open.value = true;
  }

  function hide() {
    open.value = false;
  }

  return {
    open,
    show,
    hide,
  };
}

组件中使用:

<script setup lang="ts">
const { open, show, hide } = useDialog();
</script>

适合抽取的逻辑

适合:

  • 分页。
  • 搜索筛选。
  • 弹窗开关。
  • 倒计时。
  • 数据请求流程。
  • 浏览器事件监听。

不适合:

  • 只有两三行且不会复用的状态。
  • 和组件 UI 强绑定、抽出来更难读的逻辑。
  • 一个 composable 里塞太多不相关功能。

生命周期

composable 可以使用 Vue 生命周期:

export function useWindowResize(callback: () => void) {
  window.addEventListener("resize", callback);

  onBeforeUnmount(() => {
    window.removeEventListener("resize", callback);
  });
}

这样组件卸载时可以自动清理监听。

注意事项

  • 命名用 useXxx
  • 返回值尽量清楚。
  • 一个 composable 只解决一类问题。
  • 如果内部有事件监听、定时器,要记得清理。
  • 不要把 composable 写成隐藏的全局状态。

总结

Composables 用来复用逻辑,不是复用 UI。页面逻辑重复时抽 composable,界面重复时抽组件。