Vue 3 推荐将复杂逻辑抽离为以 use 开头的单一职责组合式函数,命名直白、参数对象化、返回只读响应式数据,自动绑定生命周期管理副作用,并在 setup 中组合调用而非编写新逻辑。

直接把复杂逻辑从单文件组件里抽出来,封装成以 use 开头的独立函数,每个函数只管一件事、有明确输入输出、自动管理副作用——这是 Vue 3 拆分逻辑最自然的方式。
按业务职责拆出单一功能函数
别等逻辑堆到 200 行才动手。看到一段代码反复出现(比如表单校验、列表分页、权限判断),就立刻拎出来:
- 命名直白,如 useFormValidation(不叫 useUserFormLogic)
- 内部只处理校验规则、错误信息、触发时机,不掺杂提交、跳转或 UI 渲染
- 若校验本身又含子逻辑(如手机号格式 + 是否已注册),可再拆 usePhoneFormat 和 useCheckExist,保持层级清晰
用选项对象传参,返回只读响应式数据
避免参数顺序混乱或后期加字段难扩展:
Vue 3 组合式 API 与 最佳实践,涵盖代码组织、useXxx 模式、组合式函数设计、Store 集成、响应式优化及功能抽取。
- 接收配置统一用对象:usePagination({ current: 1, pageSize: 10, total: 100 })
- 返回值用 readonly() 包裹关键 ref,防止调用方意外赋值破坏内部状态
- 方法名动词化:nextPage()、reset(),而不是 handlePageChange
绑定生命周期,自动清理副作用
凡涉及外部资源,必须和组件共存亡:
立即学习“前端免费学习笔记(深入)”;
- DOM 监听(如 resize、scroll)在 onMounted 注册,onUnmounted 移除
- 定时器用 setTimeout / setInterval 时,保存 ID 并在卸载时 clearTimeout / clearInterval
- API 请求使用 AbortController,fetch 前生成 signal,组件销毁时 abort,避免“更新已卸载组件”警告
在 setup 中组合调用,不写新逻辑
setup 的作用不是写业务,而是拼装:
- 在 <script setup> 中直接 import 多个组合式函数</script>
- 解构调用结果:const { list, loading, fetchList } = useListRequest('/api/users')
- 必要时做轻量组合:比如把 useAuth().user 传给 useListRequest 做请求头,但不在此处重写鉴权逻辑

















