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

【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.dtcms.com/a/187079.html

相关文章:

  • wordpress自学笔记 第四节 商城菜单的添加和修改美化
  • 力扣451:根据字符频率排序(桶排序)
  • FPGA前瞻篇-计数器设计与实现实例
  • 代码随想录训练营第二十二天| 101.对称二叉树 100.相同的树
  • Linux 内核参数
  • 判断数组对象中是否某个字段的值有重复
  • 生产环境怎么移除console
  • 数字IC后端培训教程之数字后端项目典型案例分析
  • js 字符串中的特殊字符全部替换成定义对象里面key对应的value值(进阶篇)
  • Python | 赤道频散关系图
  • 【Redis】SDS结构
  • 图形化编程平台的破局之道:从工具同质化到生态差异化
  • 从MCU到SoC的开发思维转变
  • 2024年北理工Python123第六章测验题整理
  • React 播客专栏 Vol.9|React + TypeScript 项目该怎么起步?从 CRA 到配置全流程
  • 2025年Energy SCI1区TOP,改进雪消融优化算法ISAO+电池健康状态估计,深度解析+性能实测
  • UE RPG游戏开发练手 第二十一课 使用C++代码实现装备武器
  • C/C++ 内存管理深度解析:从内存分布到实践应用(malloc和new,free和delete的对比与使用,定位 new )
  • 如何使用 WebBrowserPassView 查看所有浏览器密码?
  • 用户态到内核态:Linux信号传递的九重门(二)
  • 动手学深度学习12.4.硬件-笔记练习(PyTorch)
  • 应急响应靶机——WhereIS?
  • C# 中 static的使用
  • Mysql的索引,慢查询和数据库表的设计以及乐观锁和悲观锁
  • DeepSeek | AI需求分析
  • 从零开始的python学习(七)P89+P90+P91+P92+P93+P94
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--程序启动界面
  • Python基础:类的深拷贝与浅拷贝-->with语句的使用及三个库:matplotlib基本画图-->pandas之Series创建
  • HDFS概述
  • 杰理强制烧录拨码开关