当前位置: 首页 > ds >正文

【Vue】Composables 和 Utils 区别

1. 核心功能与状态管理

• Composables

用于封装有状态的逻辑,通常结合 Vue 的响应式 API(如 refreactive)和生命周期钩子(如 onMounted),可管理组件内部的状态和副作用。例如,封装鼠标位置跟踪功能时,会维护 xy 的响应式变量。

// 示例:封装鼠标位置的 Composable
export function useMouse() {const x = ref(0);const y = ref(0);onMounted(() => { /* 监听事件 */ });return { x, y };
}

• Utils

用于处理无状态的纯逻辑,如数据格式化、数组操作等。它们不依赖 Vue 的响应式系统,也不涉及组件状态。例如,日期格式化工具函数仅接收输入并返回结果:

// 示例:日期格式化工具
export function formatDate(date) {return date.toISOString().split('T')[0];
}

2. 框架依赖性与复用范围

• Composables

深度依赖 Vue3 的组合式 API(如 ref、生命周期钩子),通常以 use 前缀命名(如 useFetchuseEventListener),适用于 Vue 组件内部复用逻辑,且每个组件实例会创建独立的状态。

• Utils

与框架无关,可以是纯 JavaScript/TypeScript 函数,适用于任何技术栈(如 React、原生 JS)。例如,字符串处理、数学计算等工具函数。


3. 适用场景

• Composables

• 需要响应式状态管理的场景(如 API 请求、事件监听)。

• 需要复用包含生命周期逻辑的功能(如组件挂载时初始化数据)。

• 需要组合多个逻辑(如将 useMouseuseEventListener 嵌套使用)。

• Utils

• 纯数据转换(如日期格式化、对象深拷贝)。

• 通用辅助功能(如防抖/节流、验证函数)。

• 与 UI 无关的逻辑(如数学计算、本地存储操作)。


4. 代码结构与设计目标

• Composables

强调逻辑的组合性,通过函数返回值暴露状态和方法,支持按需组合多个功能模块。例如,一个复杂的表单逻辑可以拆分为 useValidationuseSubmit

• Utils

强调单一职责,每个函数独立完成一个任务,不涉及状态管理。例如,capitalize 函数仅将字符串首字母大写。


5. 命名规范与类型支持

• Composables

遵循以 use 开头的命名约定(如 useCounter),并通过 TypeScript 提供强类型推导(如返回的 ref 值自动推断类型)。

• Utils

命名更灵活(如 formatDatedeepClone),类型支持取决于具体实现,不强制依赖 Vue 的类型系统。


总结对比表

特性ComposablesUtils
状态管理有状态(响应式数据)无状态(纯函数)
框架依赖依赖 Vue3 的组合式 API框架无关
典型场景组件逻辑复用(如 API 请求、事件)通用数据处理(如格式化、计算)
代码示例useMouse() 跟踪鼠标位置formatDate() 格式化日期
命名规范use 开头无强制规范
http://www.xdnf.cn/news/5798.html

相关文章:

  • SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
  • 图形化编程平台的破局之道:从工具同质化到生态差异化
  • Matlab自学笔记五十四:符号数学工具箱和符号运算、符号求解、绘图
  • 解决vue create 创建项目,不能使用上下键选择模板的问题
  • Redis集群模式、持久化、过期策略、淘汰策略、缓存穿透雪崩击穿问题
  • Python-AI调用大模型 给出大模型人格案例
  • git如何将本地 dev 分支与远程 dev 分支同步
  • ros1+docker环境快速搭建
  • 面试题 - Redis 为什么要RDB 和 AOF两种持久化方式?
  • Windows DOS下的常用命令 及 HTML
  • 如何使用快捷键打开 Microsoft Word 和其他 Windows 应用程序
  • Leetcode-BFS问题
  • 消防设施操作员备考练习题库及答案解析
  • MCP 入门实战:用 C# 开启 AI 新篇章
  • qt命名空间演示
  • SAGAR线上网页程序生成准随机结构(SQS)
  • IP 地址、银行卡等多维数据于风险控制的作用
  • 下载知网外文文献全文的方法
  • cs224w课程学习笔记-第11课
  • ComfyUI的K采样器参数详解:实战演示
  • 青少年编程与数学 02-019 Rust 编程基础 07课题、字符串
  • Linux常用命令(持续完善)
  • DAY05:深入解析生命周期与钩子函数
  • 编写一个处理txt的loader插件,适用于wbepack
  • MCU开启浮点计算FPU
  • 【Pandas】pandas DataFrame cov
  • tabs切换#
  • JVM之垃圾回收器
  • Java SpringMVC 和 MyBatis 整合关键配置详解
  • 步进电机、伺服电机与直流无刷电机的高速运动性能对比及技术瓶颈分析