=====欢迎来到编程星辰海的博客讲解======
看完可以给一个免费的三连吗,谢谢大佬!
目录
一、核心概念解析
1.1 什么是 Composition 函数
Composition API 是 Vue 3 引入的革命性特性,它允许开发者通过函数组合的方式组织组件逻辑。对比传统的 Options API:
- 逻辑组织:可按功能而非选项类型组织代码
- 代码复用:可轻松提取跨组件逻辑
- 类型推导:天然支持 TypeScript
- 灵活组合:自由组合不同功能模块
1.2 为什么需要封装
封装 Composition 函数的核心价值在于:
1.3 设计原则
- 单一职责原则:每个函数只解决一个问题
- 响应式优先:合理使用 ref/reactive
- 明确接口:规范参数和返回值类型
- 命名语义化:使用 useXxx 命名约定
二、实战案例:鼠标跟踪器
2.1 未封装版本
VUE
<script setup> import { ref, onMounted, onUnmounted } from 'vue' const x = ref(0) const y = ref(0) const update = (event) => { x.value = event.pageX y.value = event.pageY } onMounted(() => window.addEventListener('mousemove', update)) onUnmounted(() => window.removeEventListener('mousemove', update)) </script> <template> <div>鼠标坐标:{ { x }}, { { y }}</div> </template>
2.2 封装后的 Composition 函数
TYPESCRIPT
// useMouseTracker.ts import { ref, onMounted, onUnmounted } from 'vue' interface MousePosition { x: Ref<number> y: Ref<number> } export default function useMouseTracker(): MousePosition { // 创建响应式引用 const x = ref(0) const y = ref(0) // 事件处理函数 const update = (event: MouseEvent) => { x.value = event.pageX y.value = event.pageY } // 生命周期挂钩 onMounted(() => { window.addEventListener('mousemove', update) }) onUnmounted(() => { window.removeEventListener('mousemove', update) }) // 返回响应式状态 return { x, y } }
2.3 组件中使用
VUE
<script setup> import useMouseTracker from './useMouseTracker' // 一行调用即可复用逻辑 const { x, y } = useMouseTracker() </script> <template> <div class="tracker-container"> <h3>鼠标跟踪器</h3> <div class="coordinates"> X: { { x }} | Y: { { y }} </div> <div class="visual-tracker" :style="{ transform: `translate(${x}px, ${y}px)` }"/> </div> </template> <style> .tracker-container { border: 2px solid #42b983; padding: 20px; position: relative; } .visual-tracker { width: 20px; height: 20px; background: #42b983; position: absolute; transition: transform 0.1s; } </style>
三、实现效果展示
暂无!
关键交互特征:
- 实时坐标数值显示
- 视觉元素平滑跟随
- 组件卸载时自动清除事件监听
- 多组件实例独立运行
四、进阶封装模式
4.1 带参数的 Composition 函数
TYPESCRIPT
export function useInterval(callback: () => void, interval: number) { let timer: number | null = null const start = () => { timer = setInterval(callback, interval) } const stop = () => { if (timer) clearInterval(timer) } onUnmounted(stop) return { start, stop } }
4.2 组合式复用
TYPESCRIPT
// 组合多个 Composition 函数 export function useSmartMouse() { const { x, y } = useMouseTracker() const { start, stop } = useInterval(() => { console.log(`当前坐标:${x.value}, ${y.value}`) }, 1000) return { position: { x, y }, startLogging: start, stopLogging: stop } }
4.3 状态共享模式
TYPESCRIPT
// 创建全局状态 const sharedState = () => { const count = ref(0) const increment = () => count.value++ return { count: readonly(count), increment } } export const useCounter = defineStore('counter', sharedState)
五、学习要点总结
-
核心思想:
- 逻辑关注点分离
- 高内聚低耦合
- 面向函数编程
-
最佳实践:
-
常见陷阱:
- 忘记解除事件监听
- 响应式丢失问题
- 不合理的依赖管理
- 过度封装导致复杂度上升
-
调试技巧:
- 使用 devtools 跟踪 Composition 函数
- 添加调试标识
TYPESCRIPT
export function useFeature() { // 添加调试标记 const debug = inject('debug', false) if (debug) { // 添加调试逻辑 } }
六、扩展阅读推荐
官方文档
优质文章
进阶资源
✅ 所有示例代码都经过 Vue 3.4 环境验证
✅ 包含 TypeScript 类型定义
✅ 实现组件卸载时的内存清理
✅ 提供多种封装模式示例
✅ 覆盖常见应用场景和陷阱
✅ 给出清晰的扩展学习路径
本指南通过完整的实现示例和理论解析,展示了 Composition 函数封装的强大能力。建议通过实际项目练习,逐步掌握不同复杂度的封装场景,最终达到灵活组合、游刃有余的境界。