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

Vue 3 Hooks 教程

Vue 3 Hooks 教程

1. 什么是 Hooks?

在 Vue 3 中,Hooks 是一种组织和复用组件逻辑的强大方式。它们允许您将组件的状态逻辑提取到可重用的函数中,从而简化代码并提高代码的可维护性。

2. 基本 Hooks 介绍

2.1 refreactive

这两个函数是响应式数据的基础:

import { ref, reactive } from 'vue'// ref 用于基本类型
const count = ref(0)// reactive 用于对象
const state = reactive({name: '张三',age: 25
})

2.2 computed

计算属性 Hook,用于基于其他响应式数据创建衍生状态:

import { ref, computed } from 'vue'const count = ref(0)
const doubleCount = computed(() => count.value * 2)

3. 生命周期 Hooks

Vue 3 提供了多个生命周期相关的 Hooks:

import { onMounted, onUpdated, onUnmounted } from 'vue'export function useLifecycleDemo() {onMounted(() => {console.log('组件已挂载')})onUpdated(() => {console.log('组件已更新')})onUnmounted(() => {console.log('组件即将卸载')})
}

4. 自定义 Hooks

4.1 创建可复用的状态逻辑

// useCounter.ts
import { ref, computed } from 'vue'export function useCounter(initialValue = 0) {const count = ref(initialValue)function increment() {count.value++}function decrement() {count.value--}const isPositive = computed(() => count.value > 0)return {count,increment,decrement,isPositive}
}

4.2 异步 Hooks

// useFetch.ts
import { ref, computed } from 'vue'export function useFetch(url: string) {const data = ref(null)const error = ref(null)const loading = ref(true)async function fetchData() {try {const response = await fetch(url)data.value = await response.json()loading.value = false} catch (err) {error.value = errloading.value = false}}fetchData()return {data,error,loading}
}

5. Hooks 最佳实践

  1. 保持 Hooks 简单:每个 Hook 应该专注于单一功能。
  2. 命名约定:以 use 开头,如 useCounteruseFetch
  3. 避免副作用:尽量保持 Hooks 的纯净性。
  4. 错误处理:在 Hooks 中添加适当的错误处理机制。

6. 常见 Hooks 示例

6.1 本地存储 Hook

import { ref, watch } from 'vue'export function useLocalStorage(key: string, initialValue: any) {const storedValue = localStorage.getItem(key)const value = ref(storedValue ? JSON.parse(storedValue) : initialValue)watch(value, (newValue) => {localStorage.setItem(key, JSON.stringify(newValue))}, { deep: true })return value
}

6.2 鼠标位置 Hook

import { ref, onMounted, onUnmounted } from 'vue'export function useMousePosition() {const x = ref(0)const y = ref(0)function update(event: MouseEvent) {x.value = event.pageXy.value = event.pageY}onMounted(() => {window.addEventListener('mousemove', update)})onUnmounted(() => {window.removeEventListener('mousemove', update)})return { x, y }
}

7. 结论

Vue 3 的 Hooks 为组件逻辑复用提供了一种强大而灵活的方式。通过合理使用 Hooks,您可以编写更加模块化、可读和可维护的代码。

http://www.lryc.cn/news/494941.html

相关文章:

  • pandas数据处理及其数据可视化的全流程
  • docker 在ubuntu系统安装,以及常用命令,配置阿里云镜像仓库,搭建本地仓库等
  • torch.maximum函数介绍
  • Java面试之多线程并发篇(9)
  • Java全栈:超市购物系统实现
  • 1.1 数据结构的基本概念
  • 深度学习:GPT-2的MindSpore实践
  • 【Oracle11g SQL详解】ORDER BY 子句的排序规则与应用
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第15篇(完结):讨论和未来展望】
  • Java设计模式 —— 【创建型模式】原型模式(浅拷贝、深拷贝)详解
  • SciAssess——评估大语言模型在科学文献处理中关于模型的记忆、理解和分析能力的基准
  • SQLModel与FastAPI结合:构建用户增删改查接口
  • 【RISC-V CPU debug 专栏 2.3 -- Run Control】
  • 探索 IntelliJ IDEA 中 Spring Boot 运行配置
  • 三除数枚举
  • 【051】基于51单片机温度计【Proteus仿真+Keil程序+报告+原理图】
  • [Java]微服务之服务保护
  • 自动驾驶目标检测融合全貌
  • 消息框(Message Box)的测试方法和测试用例
  • Ubuntu 包管理
  • [Ubuntu] linux之Ubuntu18.04的下载及在虚拟机中详细安装过程(附有下载链接)
  • ffmpeg安装(windows)
  • 服务器数据恢复—raid6阵列硬盘被误重组为raid5阵列的数据恢复案例
  • linux内核编译启动总结
  • Android Studio的AI工具插件使用介绍
  • 本地部署 WireGuard 无需公网 IP 实现异地组网
  • asyncio.ensure_future 与 asyncio.create_task:Python异步编程中的选择
  • CTF之密码学(密码特征分析)
  • JVM调优篇之JVM基础入门AND字节码文件解读
  • EXCEL截取某一列从第一个字符开始到特定字符结束的字符串到新的一列