vue组合式函数需以use开头并用明确动词或名词命名,如usecounter;返回完整自洽的响应式数据与操作函数,显式传入依赖,自动管理生命周期,支持配置化与typescript类型安全。

封装可重用的状态逻辑,核心是把响应式状态、计算属性、副作用和操作方法打包成一个语义清晰、边界明确的函数,并确保每次调用都生成独立、隔离的实例。
用 use 开头 + 明确动词或名词命名
这是 Vue 社区强制约定,也是代码可读性的第一道门槛。名称必须让人一眼看懂用途,避免模糊词如 useData 或 useHelper。
- 推荐写法:useCounter(计数器)、useToggle(开关状态)、usePagination(分页控制)
- 不推荐写法:useState、useCommon、useBase —— 它们无法传达具体行为或能力
- 如果逻辑涉及多个实体,优先拆分而不是合并,例如不要写 useUserAndOrder,而应分别封装 useUser 和 useOrder
状态创建与返回需完整自洽
不要只暴露一个 computed 或一个 ref,而要返回一组协同工作的响应式数据和操作函数。外部使用者拿到的是“开箱即用”的逻辑单元。
- 内部用
ref、reactive、computed创建状态,但对外暴露时对可变状态加readonly()保护 - 所有依赖关系必须显式传入,不读取全局变量或隐式上下文;例如分页逻辑需要
total和pageSize,就通过参数接收它们的 ref 或 getter - 返回值接口建议用 TypeScript 明确定义,比如
UseCounterReturn,包含count、doubled、increment等字段
生命周期与副作用要自动管理
组合式函数不是纯工具函数,它可能绑定事件、启动定时器、发起请求——这些都需要在组件卸载时清理,否则引发内存泄漏。
- 使用
onMounted、onUnmounted、onBeforeUnmount等钩子,在内部完成注册与注销 - 例如
useMouse()内部监听mousemove,就必须在onUnmounted中移除监听器 - 异步请求类函数(如
useRequest)应在onUnmounted中取消未完成的 Promise(配合 AbortController)
支持配置化与类型安全
真正可复用的逻辑不能硬编码参数,而应允许调用方定制行为;同时 TypeScript 类型能提前拦截错误用法。
- 提供可选配置对象,例如
useCounter({ min: 0, max: 100 }),内部用解构默认值处理 - 对输入参数做类型约束:接收
Ref而非原始值,或接受 getter 函数以支持延迟求值 - 返回值中所有响应式字段标注
ReadonlyRef或ComputedRef,防止外部意外修改内部状态
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










