⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Vue3 Composables — 逻辑复用

学习Vue3的Composables模式,替代Vue2 Mixins的现代复用方案 · 难度:进阶 · +25XP

Composables 是什么?

Composable(组合式函数)是一个以 use 开头的函数,把有状态的逻辑封装起来,在多个组件中复用。

比如:鼠标位置追踪、数据请求、本地存储、计数器——这些逻辑可以抽成Composables,任何组件都可以用。

一个简单的 Composable

// useCounter.js
import { ref } from "vue";
export function useCounter(initial = 0) {
  const count = ref(initial);
  const increment = () => count.value++;
  const decrement = () => count.value--;
  const reset = () => count.value = initial;
  return { count, increment, decrement, reset };
}

在组件中使用:

setup() {
  const { count, increment, decrement, reset } = useCounter(10);
  return { count, increment, decrement, reset };
}

另一个例子:useMouse — 追踪鼠标位置

export function useMouse() {
  const x = ref(0), y = ref(0);
  function update(e) { x.value = e.pageX; y.value = e.pageY; }
  onMounted(() => window.addEventListener("mousemove", update));
  onUnmounted(() => window.removeEventListener("mousemove", update));
  return { x, y };
}

Composables vs Mixins(Vue2)

Composables(Vue3)Mixins(Vue2)
✅ 明确的import来源❌ 不知道方法从哪来
✅ 解构可重命名,不会冲突❌ 同名属性互相覆盖
✅ TypeScript友好❌ 类型推断差
✅ 显式传参,依赖清晰❌ 隐式依赖,难以追踪

动手试试

右边用useCounter composable实现了两个独立的计数器——它们共享同一个逻辑函数,但各自的数据是独立的。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 125 篇
0 完成
🔥 0