六十天前端强化训练之第二十八天之Composition 函数完全指南

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

目录

一、核心概念解析

1.1 什么是 Composition 函数

1.2 为什么需要封装

1.3 设计原则

二、实战案例:鼠标跟踪器

2.1 未封装版本

2.2 封装后的 Composition 函数

2.3 组件中使用

三、实现效果展示

四、进阶封装模式

4.1 带参数的 Composition 函数

4.2 组合式复用

4.3 状态共享模式

五、学习要点总结

六、扩展阅读推荐

官方文档

优质文章

进阶资源


一、核心概念解析

1.1 什么是 Composition 函数

Composition API 是 Vue 3 引入的革命性特性,它允许开发者通过函数组合的方式组织组件逻辑。对比传统的 Options API:

  • 逻辑组织:可按功能而非选项类型组织代码
  • 代码复用:可轻松提取跨组件逻辑
  • 类型推导:天然支持 TypeScript
  • 灵活组合:自由组合不同功能模块

1.2 为什么需要封装

封装 Composition 函数的核心价值在于:

1.3 设计原则

  1. 单一职责原则:每个函数只解决一个问题
  2. 响应式优先:合理使用 ref/reactive
  3. 明确接口:规范参数和返回值类型
  4. 命名语义化:使用 useXxx 命名约定

二、实战案例:鼠标跟踪器

2.1 未封装版本

VUE

<script setup>
import { ref, onMounted, onUnmounted } from 'vue'const x = ref(0)
const y = ref(0)const update = (event) => {x.value = event.pageXy.value = event.pageY
}onMounted(() => window.addEventListener('mousemove', update))
onUnmounted(() => window.removeEventListener('mousemove', update))
</script><template><div>鼠标坐标:{{ x }}, {{ y }}</div>
</template>

2.2 封装后的 Composition 函数

TYPESCRIPT

// useMouseTracker.ts
import { ref, onMounted, onUnmounted } from 'vue'interface MousePosition {x: Ref<number>y: Ref<number>
}export default function useMouseTracker(): MousePosition {// 创建响应式引用const x = ref(0)const y = ref(0)// 事件处理函数const update = (event: MouseEvent) => {x.value = event.pageXy.value = event.pageY}// 生命周期挂钩onMounted(() => {window.addEventListener('mousemove', update)})onUnmounted(() => {window.removeEventListener('mousemove', update)})// 返回响应式状态return { x, y }
}

2.3 组件中使用

VUE

<script setup>
import useMouseTracker from './useMouseTracker'// 一行调用即可复用逻辑
const { x, y } = useMouseTracker()
</script><template><div class="tracker-container"><h3>鼠标跟踪器</h3><div class="coordinates">X: {{ x }} | Y: {{ y }}</div><div class="visual-tracker" :style="{ transform: `translate(${x}px, ${y}px)` }"/></div>
</template><style>
.tracker-container {border: 2px solid #42b983;padding: 20px;position: relative;
}.visual-tracker {width: 20px;height: 20px;background: #42b983;position: absolute;transition: transform 0.1s;
}
</style>

三、实现效果展示

暂无!

关键交互特征:

  1. 实时坐标数值显示
  2. 视觉元素平滑跟随
  3. 组件卸载时自动清除事件监听
  4. 多组件实例独立运行

四、进阶封装模式

4.1 带参数的 Composition 函数

TYPESCRIPT

export function useInterval(callback: () => void, interval: number) {let timer: number | null = nullconst start = () => {timer = setInterval(callback, interval)}const stop = () => {if (timer) clearInterval(timer)}onUnmounted(stop)return { start, stop }
}

4.2 组合式复用

TYPESCRIPT

// 组合多个 Composition 函数
export function useSmartMouse() {const { x, y } = useMouseTracker()const { start, stop } = useInterval(() => {console.log(`当前坐标:${x.value}, ${y.value}`)}, 1000)return {position: { x, y },startLogging: start,stopLogging: stop}
}

4.3 状态共享模式

TYPESCRIPT

// 创建全局状态
const sharedState = () => {const count = ref(0)const increment = () => count.value++return {count: readonly(count),increment}
}export const useCounter = defineStore('counter', sharedState)

五、学习要点总结

  1. 核心思想

    • 逻辑关注点分离
    • 高内聚低耦合
    • 面向函数编程
  2. 最佳实践

  3. 常见陷阱

    • 忘记解除事件监听
    • 响应式丢失问题
    • 不合理的依赖管理
    • 过度封装导致复杂度上升
  4. 调试技巧

    • 使用 devtools 跟踪 Composition 函数
    • 添加调试标识

    TYPESCRIPT

    export function useFeature() {// 添加调试标记const debug = inject('debug', false)if (debug) {// 添加调试逻辑}
    }
    

六、扩展阅读推荐

官方文档

  1. Composition API 指南
  2. 响应式原理剖析
  3. 最佳实践文档

优质文章

  1. Vue Composition API 设计模式
  2. 大型项目中的 Composition API 实践
  3. Composition 函数测试策略

进阶资源

  1. VueUse 源码分析
  2. 状态机封装模式
  3. TypeScript 深度集成

✅ 所有示例代码都经过 Vue 3.4 环境验证
✅ 包含 TypeScript 类型定义
✅ 实现组件卸载时的内存清理
✅ 提供多种封装模式示例
✅ 覆盖常见应用场景和陷阱
✅ 给出清晰的扩展学习路径

本指南通过完整的实现示例和理论解析,展示了 Composition 函数封装的强大能力。建议通过实际项目练习,逐步掌握不同复杂度的封装场景,最终达到灵活组合、游刃有余的境界。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38652.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 锁机制详解

MySQL 锁机制详解 5.1 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、 RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有 效性是所有数…

常见中间件漏洞攻略-Apache篇

漏洞名称&#xff1a;Apache HTTP Server 路径穿越漏洞-CVE-2021-41773 第一步&#xff1a;拉取环境、启动环境 #拉取环境 docker pull blueteamsteve/cve-2021-41773:no-cgidhttp://121.40.229.129:8080#启动环境 docker run -dit -p 8080:80 blueteamsteve/cve-2021-41773:n…

站群服务器是什么意思呢?

站群服务器是一种专门为托管和管理多个网站而设计的服务器&#xff0c;其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名&#xff0c;以及集中管理多个网站的需求。以下是站群服务器的详细解释&#xff1a; 一、站群服务器的定义 站群…

Excel 小黑第22套

对应大猫22 新建一行&#xff0c;输入第一个人名字&#xff0c; 填充 -快速填充 修改员工编号&#xff08;1—001&#xff09;&#xff1a;选中所有员工编号&#xff0c;开始 -数据组 -自定义数字格式 000 在所有空表格单元格中输入数字0&#xff1a;选中修改的表格范围&#…

多传感器融合 SLAM LVI-SAM

目录 LVI-SAM 简介 A. 系统概述 B. 视觉惯导系统 C.雷达惯导系统 LVI-SAM 安装编译 编译 LVI-SAM 常见问题 LVI-SAM 工程化建议 LVI-SAM 简介 源码地址:https://github.com/TixiaoShan/LVI-SAM 如无法下载,换用 gitee 版本:https://gitee.com/inf_lee/LVI-SAM 改进…

Linux shell脚本3-if语句、case语句、for语句、while语句、until语句、break语句、continue语句,格式说明及程序验证

目录 1.if 控制语句 1.1 if 语句格式 1.2 程序验证 2.case语句 2.1case语句格式 2.2程序验证 2.2.1 终端先执行程序&#xff0c;在输入一个数 2.2.2 终端执行程序时同时输入一个预设变量 2.2.3 case带有按位或运算和通配符匹配 3.for语句 3.1for语句格式 3.2程序验…

图解模糊推理过程(超详细步骤)

我们前面已经讨论了三角形、梯形、高斯型、S型、Z型、Π型6种隶属函数&#xff0c;下一步进入模糊推理阶段。 有关六种隶属函数的特点在“Pi型隶属函数&#xff08;Π-shaped Membership Function&#xff09;的详细介绍及python示例”都有详细讲解&#xff1a;https://lzm07.b…

001-JMeter的安装与配置

1.前期准备 下载好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下载好JDK : :Java Downloads | Oracle 中国 下载图中圈蓝的JMeter和JDK就行&#xff0c;让它边下载&#xff0c;我们边往下看 2.为什么要下载并安装JDK ? JMeter 是基于 Java 开发的工具&#…

英伟达有哪些支持AI绘画的 工程

英伟达在AI绘画领域布局广泛&#xff0c;其自研工具与第三方合作项目共同构建了完整的技术生态。以下是其核心支持AI绘画的工程及合作项目的详细介绍&#xff1a; 一、英伟达自研AI绘画工具 1. GauGAN系列 技术特点&#xff1a;基于生成对抗网络&#xff08;GAN&#xff09;&…

Netty源码—4.客户端接入流程二

大纲 1.关于Netty客户端连接接入问题整理 2.Reactor线程模型和服务端启动流程 3.Netty新连接接入的整体处理逻辑 4.新连接接入之检测新连接 5.新连接接入之创建NioSocketChannel 6.新连接接入之绑定NioEventLoop线程 7.新连接接入之注册Selector和注册读事件 8.注册Rea…

2025.3.17-2025.3.23学习周报

目录 摘要Abstract1 文献阅读1.1 动态图邻接矩阵1.2 总体框架1.2.1 GCAM1.2.2 输出块 1.3 实验分析 总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种名为TFM-GCAM的模型。TFM-GCAM模型的创新主要分为两部分&#xff0c;一部分是交通流量矩阵的设计&#xff0c;TFM-GC…

生活电子类常识——搭建openMauns工作流+搭建易犯错解析

前言 小白一句话生成一个网站&#xff1f;小白一句话生成一个游戏&#xff1f;小白一句话生成一个ppt?小白一句话生成一个视频&#xff1f; 可以 原理 总体的执行流程是 1&#xff0c;用户下达指令 2&#xff0c;大模型根据用户指令&#xff0c;分解指令任务为多个细分步骤…

深入解析 Uniswap:自动做市商模型的数学推导与智能合约架构

目录 1. 自动做市商&#xff08;AMM&#xff09;模型的数学推导1.1 恒定乘积公式推导1.2 价格影响与滑点 2. Uniswap 智能合约架构解析2.1 核心合约&#xff08;Core&#xff09;2.1.1 工厂合约&#xff08;Factory&#xff09;2.1.2 交易对合约&#xff08;Pair&#xff09; 2…

高频面试题(含笔试高频算法整理)基本总结回顾20

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…

生成模型速通(Diffusion,VAE,GAN)

基本概念 参考视频https://www.bilibili.com/video/BV1re4y1m7gb/?spm_id_from333.337.search-card.all.click&vd_sourcef04f16dd6fd058b8328c67a3e064abd5 生成模型其实是主要是依赖概率分布&#xff0c;对输入特征的概率密度函数建模 隐空间&#xff08;latent space)…

Android在kts中简单使用AIDL

Android在kts中简单使用AIDL AIDL相信做Android都有所了解&#xff0c;跨进程通信会经常使用&#xff0c;这里就不展开讲解原理跨进程通信的方式了&#xff0c;最近项目换成kts的方式&#xff0c;于是把aidl也换成了统一的方式&#xff0c;其中遇到了很多问题&#xff0c;这里…

学习本地部署DeepSeek的过程(基于ollama)

DeepSeek除了支持在线调用服务接口外&#xff0c;还支持本地部署后调用本地服务&#xff0c;这样的好处是不需要api key&#xff0c;且资源独占&#xff0c;还能训练个人知识库。本文学习并记录本地部署DeepSeek的过程。   参考文献3中列出了不同模型对于电脑硬件的要求&…

文献分享: ColXTR——将ColBERTv2的优化引入ColXTR

1. ColXTR \textbf{1. ColXTR} 1. ColXTR原理 1.1. ColBERTv2 \textbf{1.1. ColBERTv2} 1.1. ColBERTv2概述 1.1.1. \textbf{1.1.1. } 1.1.1. 训练优化 1️⃣难负样本生成 初筛&#xff1a;基于 BM-25 \text{BM-25} BM-25找到可能的负样本重排&#xff1a;使用 KL \text{KL} KL…

Altium Designer数模电学习笔记

模电 电容 **退耦&#xff1a;**利用通交阻直&#xff0c;将看似直流的信号中的交流成分滤除 &#xff08;一般用在给MPU供电&#xff0c;尽量小一些&#xff0c;10nf~100nf~1uf以下&#xff09; **滤波&#xff1a;**也可以理解为给电容充电&#xff0c;让电容在电平为低时…

从指令集鸿沟到硬件抽象:AI 如何重塑手机与电脑编程语言差异——PanLang 原型全栈设计方案与实验性探索1

AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1 文章目录 AI 如何跨越指令集鸿沟&#xff1f;手机与电脑编程语言差异溯源与统一路径——PanLang 原型全栈设计方案与实验性探索1前言一、手机与电脑编程语言…