Vue3中hooks详解
📅 2026/7/16 8:54:04
👁️ 次浏览
Vue3中hooks详解一、 核心概念1. 什么是 Composable2. 为什么需要它二、 基本结构与规范三、 常见应用场景与示例1. 鼠标位置追踪 (useMouse)2. 网络请求封装 (useFetch)3. 本地存储同步 (useLocalStorage)四、 最佳实践与注意事项五、 总结在 Vue 3 中Hooks钩子函数 通常指的是组合式函数Composables。这是一种基于组合式 APIComposition API的代码复用和组织逻辑的模式。它允许你将组件中的状态和逻辑提取到独立的函数中从而实现逻辑的复用、解耦和更好的可测试性。一、 核心概念1. 什么是 Composable* 它是一个函数利用 Vue 的组合式 API如 ref, reactive, computed, watch, onMounted等来封装和复用有状态逻辑。 * 约定俗成地Composable 函数名以 use 开头例如 useMouse, useFetch以便识别。2. 为什么需要它* 逻辑复用解决 Vue 2 中 Mixins 存在的命名冲突、来源不清晰等问题。 * 代码组织将相关逻辑状态 方法 副作用聚合在一起而不是分散在 data, methods, mounted 等选项中。 * 灵活性可以嵌套使用一个 Composable 可以调用另一个 Composable。二、 基本结构与规范一个标准的 Composable 函数通常包含以下部分// useCounter.jsimport{ref,computed}fromvueexportfunctionuseCounter(initialValue0){// 1. 定义响应式状态constcountref(initialValue)// 2. 定义计算属性或方法constdoublecomputed(()count.value*2)functionincrement(){count.value}functiondecrement(){count.value--}// 3. 返回需要暴露给组件使用的状态和方法return{count,double,increment,decrement}}在组件中使用script setupimport{useCounter}from./useCounter// 调用 hook获取状态和方法const{count,double,increment,decrement}useCounter(10)/scripttemplatedivpCount:{{count}}/ppDouble:{{double}}/pbutton clickincrement/buttonbutton clickdecrement-/button/div/template三、 常见应用场景与示例1. 鼠标位置追踪 (useMouse)监听鼠标移动事件返回当前坐标。// useMouse.jsimport{ref,onMounted,onUnmounted}fromvueexportfunctionuseMouse(){constxref(0)constyref(0)constupdate(event){x.valueevent.pageX y.valueevent.pageY}onMounted(()window.addEventListener(mousemove,update))onUnmounted(()window.removeEventListener(mousemove,update))return{x,y}}2. 网络请求封装 (useFetch)封装通用的异步数据获取逻辑处理加载状态、错误和数据。// useFetch.jsimport{ref,watchEffect}fromvueexportfunctionuseFetch(url){constdataref(null)consterrorref(null)constloadingref(true)constfetchDataasync(){loading.valuetruetry{constresawaitfetch(url)if(!res.ok)thrownewError(Network response was not ok)data.valueawaitres.json()}catch(err){error.valueerr.message}finally{loading.valuefalse}}// 当 url 变化时重新获取数据watchEffect((){fetchData()})return{data,error,loading}}3. 本地存储同步 (useLocalStorage)将响应式数据同步到浏览器的 localStorage。// useLocalStorage.jsimport{ref,watchEffect}fromvueexportfunctionuseLocalStorage(key,defaultValue){conststoredValuelocalStorage.getItem(key)conststateref(storedValue?JSON.parse(storedValue):defaultValue)watchEffect((){localStorage.setItem(key,JSON.stringify(state.value))})returnstate}四、 最佳实践与注意事项命名规范始终以use开头后跟描述性功能名称驼峰命名法。返回值始终返回一个对象包含组件需要访问的状态和方法。即使只返回一个值也建议包裹在对象中保持接口一致性和未来扩展性。避免副作用泄露确保在onUnmounted中清理事件监听器、定时器等防止内存泄漏。参数化通过函数参数接收配置项或初始值提高 Hook 的通用性。不要直接修改传入的 Ref如果 Hook 接收ref作为参数应避免直接替换该ref对象而是修改其.value。如果需要替换应返回新的ref。类型支持TypeScript为 Composable 函数添加明确的类型定义提升开发体验和代码健壮性。// useCounter.tsimport{ref,Ref}fromvueexportfunctionuseCounter(initialValue:number0){constcount:Refnumberref(initialValue)// ...return{count,/* ... */}}与 Pinia/Vuex 的区别Composables侧重于逻辑复用状态通常局限于使用该 Hook 的组件实例除非特意共享。每个组件调用useXxx()通常会获得独立的状态副本。Pinia/Vuex侧重于全局状态管理状态是单例的所有组件共享同一份状态。五、 总结Vue 3 的 Hooks/Composables 是构建大型、可维护应用的关键工具。它们通过函数式的组合方式实现了比 Mixins 更清晰、更灵活、更类型安全的逻辑复用。掌握 Composables 的编写和使用是深入理解 Vue 3 组合式 API 的核心。
图像分割:基于颜色的区域分割方法📚 本章学习目标:深入理解基于颜色的区域分割方法的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《计算机视觉教程》图像分割与形态学篇(第…
📅 2026/7/16 8:53:04
1. CAN通信基础与硬件准备 第一次接触CAN总线时,我被它的两根信号线(CAN_H和CAN_L)搞得很困惑——这看起来和串口线没什么区别,为什么汽车和工业控制都爱用它?后来在车间调试时才发现,当电机启动产生强烈电…
📅 2026/7/16 8:53:04
1. 先搞清楚这个“最强AI对话”到底能做什么 看到“最强AI对话”这种标题,第一反应不是急着找下载链接,而是先确认它到底解决什么问题。从标题和常见搜索趋势来看,这类工具通常面向需要频繁进行文本对话、内容生成或信息查询的用户࿰…
📅 2026/7/16 8:53:04
更多请点击:
https://intelliparadigm.com
第一章:Agent工作流设计终极法则:NASA级容错架构 金融级审计日志(含OpenTelemetry深度集成方案) 在高可靠性Agent系统中,单一故障点必须被彻底消灭。NASA级容错…
📅 2026/7/16 20:13:42
终极指南:如何在macOS上使用WinDiskWriter高效创建Windows启动盘 【免费下载链接】windiskwriter 🖥 Windows Bootable USB creator for macOS. 🛠 Patches Windows 11 to bypass TPM and Secure Boot requirements. 👾 UEFI &…
📅 2026/7/16 20:13:42
计算机考研408终极备考秘籍:3个颠覆性技巧让你的复习效率提升50% 【免费下载链接】cs-408 计算机考研专业课程408相关的复习经验,资源和OneNote笔记 项目地址: https://gitcode.com/GitHub_Trending/cs/cs-408
还在为计算机考研408四门课程的知识…
📅 2026/7/16 20:13:42
终极指南:5步掌握Buzz离线语音转录,免费保护隐私同时提升10倍效率 【免费下载链接】buzz Buzz transcribes and translates audio offline on your personal computer. Powered by OpenAIs Whisper. 项目地址: https://gitcode.com/GitHub_Trending/bu…
📅 2026/7/16 20:13:42
5分钟上手prettyplease:Rust语法树美化打印工具快速入门 【免费下载链接】prettyplease A minimal syn syntax tree pretty-printer 项目地址: https://gitcode.com/gh_mirrors/pr/prettyplease
你是否曾经遇到过Rust代码生成工具输出的代码难以阅读…
📅 2026/7/16 20:13:42
在Windows Hyper-V中运行macOS:从Tiger到Tahoe的全版本体验 【免费下载链接】OSX-Hyper-V OpenCore configuration for running macOS on Windows Hyper-V. 项目地址: https://gitcode.com/gh_mirrors/os/OSX-Hyper-V
想象一下,在Windows系统上运…
📅 2026/7/16 20:12:41
1. 项目概述:为什么用遗传算法解5皇后问题,而不是直接回溯?我带过十几届算法课,也给不少初创团队做过AI架构咨询。每次讲到组合优化问题,学生和工程师的第一反应永远是“写个回溯试试”。这没错——55棋盘上找所有合法…
📅 2026/7/16 0:00:02
前几天调试一个简单的电源模块,用到了5.1V稳压管。电路接好,上电测试,万用表一量——输出居然只有4.7V。第一反应是稳压管坏了,换了一个新的,结果还是4.7V。这让我想起很多初学者都会遇到的困惑:明明标称5.…
📅 2026/7/16 0:00:02
1. 项目概述与核心价值 在高速数字系统、通信设备乃至精密测量仪器中,一个稳定、纯净且可精确调控的时钟信号,往往是整个系统稳定运行的“心跳”。无论是确保数据在光纤中无误传输,还是让ADC/DAC芯片精准采样,亦或是让多块FPGA板卡…
📅 2026/7/16 0:00:02
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/15 22:51:06
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/15 19:03:10
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/16 14:13:12
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/15 22:46:06
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/16 4:59:31
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/15 22:51:03