composition api的核心价值在于通过composable函数封装可复用、可测试、与组件解耦的逻辑,支持参数配置、副作用清理、typescript类型定义及单元测试,专注“做什么”而非“怎么渲染”。

Vue.js 的 Composition API 不仅适合组件内部逻辑组织,更是构建可复用、可测试、与组件解耦的逻辑库(Logic Libraries)的理想方式。核心在于将响应式状态、副作用和业务逻辑封装为函数,通过 setup() 或 defineComponent 按需导入使用,不依赖 this 或 Options API 的上下文。
用 composable 函数封装独立逻辑
一个 composable 是一个返回响应式状态和方法的函数,通常以 useXxx 命名。它内部调用 ref、reactive、computed、watch 等 API,但对外只暴露必要接口。
- 避免直接导出 ref 或 reactive 对象,而是返回解构后的响应式属性和操作函数
- 支持参数配置,例如
useFetch(url, options)或useForm(initialValues) - 内部可使用
onMounted、onUnmounted管理生命周期,但不要假设宿主组件存在 —— 可通过判断getCurrentInstance()做安全兜底
处理副作用与资源清理
逻辑库常涉及异步请求、定时器、事件监听等副作用,必须显式清理以防止内存泄漏。
递归分析 Vue 项目组件依赖,从入口文件生成组件层级图,支持 Vue 2/3,输出组件名、文件路径和属性。适用于分析组件结构、排查依赖或了解项目架构。
- 在 composable 内部使用
onBeforeUnmount或onScopeDispose(Vue 3.4+)注册清理函数 - 对
setTimeout、setInterval、addEventListener等手动维护清除句柄 - 若逻辑需跨多个组件共享状态,可结合
provide/inject或单独的状态管理(如ref+export),但注意响应式穿透与重用边界
设计可组合、可扩展的接口
好的逻辑库应支持组合(composition)、覆盖(override)和扩展(extend),而非硬编码行为。
- 提供默认行为,同时允许传入自定义函数,例如
onSuccess、onError回调 - 返回的对象可包含
state(响应式数据)、actions(方法)、helpers(计算属性或工具函数)三类字段,结构清晰 - 避免在 composable 中直接访问 DOM 或
$refs;如需 DOM 交互,接收 element ref 作为参数(如useIntersection(elRef))
配套 TypeScript 与单元测试
TypeScript 能显著提升逻辑库的可用性与可靠性;单元测试则确保逻辑在不同场景下稳定运行。
- 为 composable 函数添加完整类型定义,包括参数、返回值、以及内部暴露的属性类型
- 使用
@vue/test-utils的mount配合vi.mock测试副作用;更轻量的方式是直接调用 composable,在describe中用vi.useFakeTimers()控制异步流程 - 测试重点覆盖:初始状态、状态变更路径、错误处理分支、清理逻辑是否触发
不复杂但容易忽略的是:逻辑库的职责边界。它应该专注“做什么”,而不是“怎么渲染”——所有 UI 相关逻辑仍由组件承担。Composition API 的真正价值,在于让逻辑回归 JavaScript 本质:函数即能力,组合即复用。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










