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

Vue3 + 组合式 API + 完整可运行 的 3 个超级常用通用 Hooks:useRequest、useClipboard、useStorage

1. useRequest —— 统一管理接口请求(最常用)

功能:

  • 自动管理 data /loading/error
  • 支持手动 / 自动执行
  • 支持传参
  • 支持异步函数
// src/hooks/useRequest.ts import { ref, onMounted } from 'vue' export function useRequest<T = any>( apiFn: (...args: any[]) => Promise<T>, options = { immediate: true } ) { const data = ref<T | null>(null) const loading = ref(false) const error = ref<Error | null>(null) const run = async (...args: any[]) => { loading.value = true error.value = null try { const res = await apiFn(...args) data.value = res return res } catch (err) { error.value = err as Error console.error('请求失败:', err) } finally { loading.value = false } } // 立即执行 if (options.immediate) { onMounted(() => run()) } return { data, loading, error, run } }
<script setup lang="ts"> import { useRequest } from '@/hooks/useRequest' // 模拟接口 const getList = () => fetch('/api/list').then(res => res.json()) const { data, loading, error, run } = useRequest(getList) </script> <template> <div v-if="loading">加载中...</div> <div v-else-if="error">请求失败:{{ error.message }}</div> <div v-else>数据:{{ data }}</div> <button @click="run">刷新</button> </template>

2. useClipboard —— 复制到剪贴板

功能:

  • 复制文本
  • 自动提示复制成功状态
  • 兼容所有现代浏览器
// src/hooks/useClipboard.ts import { ref } from 'vue' export function useClipboard() { const copied = ref(false) const copy = async (text: string) => { try { await navigator.clipboard.writeText(text) copied.value = true setTimeout(() => (copied.value = false), 1500) } catch (err) { console.error('复制失败', err) } } return { copy, copied } }
<script setup> import { useClipboard } from '@/hooks/useClipboard' const { copy, copied } = useClipboard() </script> <template> <button @click="copy('我是要复制的内容')"> {{ copied ? '复制成功' : '点击复制' }} </button> </template>

3. useStorage —— 本地存储(localStorage /sessionStorage)

功能:

  • 自动 JSON 序列化 / 反序列化
  • 响应式
  • 支持 localStorage /sessionStorage
  • 支持删除
// src/hooks/useStorage.ts import { ref, watch } from 'vue' type StorageType = 'local' | 'session' export function useStorage<T>( key: string, defaultValue: T, type: StorageType = 'local' ) { const storage = type === 'local' ? localStorage : sessionStorage // 初始化 const read = () => { try { const item = storage.getItem(key) return item ? JSON.parse(item) : defaultValue } catch { return defaultValue } } const data = ref<T>(read()) // 监听变化自动保存 watch( data, (val) => { storage.setItem(key, JSON.stringify(val)) }, { deep: true } ) // 删除 const remove = () => { storage.removeItem(key) data.value = defaultValue } return { data, remove } }
<script setup> import { useStorage } from '@/hooks/useStorage' // 存 localStorage const { data: userInfo, remove } = useStorage('userInfo', { name: '张三' }) // 存 sessionStorage // const { data } = useStorage('token', '', 'session') </script> <template> <div>{{ userInfo.name }}</div> <button @click="userInfo.name = '李四'">修改</button> <button @click="remove">删除</button> </template>
// src/hooks/useModal.ts import { ref } from 'vue' export function useModal(initVisible = false) { const visible = ref(initVisible) const open = () => (visible.value = true) const close = () => (visible.value = false) const toggle = () => (visible.value = !visible.value) return { visible, open, close, toggle } }
http://www.gsyq.cn/news/1356098.html

相关文章:

  • 一个人如何完成一个部门的工作?
  • PDF补丁丁文本替换终极指南:三步批量修改PDF内容
  • 黄金回收白银回收铂金回收彩金回收店铺推荐织金县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 终极指南:5步解决Cursor AI试用限制,永久免费使用Pro功能
  • ncmdump工具终极指南:3步解锁网易云音乐NCM格式限制
  • 2026年GitHub Copilot平替评测
  • 洛雪音乐音源:免费打造你的全网音乐图书馆,告别平台割裂
  • Online3DViewer完整实战:浏览器端3D模型可视化解决方案深度解析
  • 3分钟搞定!在Mac上直接运行Windows应用的终极指南
  • 如何快速部署i茅台智能预约系统:面向初学者的完整指南
  • 在PC上解锁Switch游戏体验:Ryujinx模拟器深度配置手册
  • 十七、MYSQL MGR高可用
  • Dark Reader动态主题修复:三步解决网站深色适配难题
  • Path of Building PoE2:终极流放之路2角色构建指南与实战教程
  • 黄金回收白银回收铂金回收彩金回收店铺推荐株洲县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐中江县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 如何在5分钟内免费下载B站大会员4K视频?完整B站视频下载指南
  • 戴森球计划工厂蓝图库:让复杂生产线变得简单有趣
  • UWB自动跟随技术深度解析:高尔夫球包车的“智能随行“是如何实现的
  • 戴森球计划工厂蓝图库:从零到终极自动化生产的完整指南
  • 洛雪音乐音源聚合系统:构建全网音乐资源一体化解决方案
  • 原神游戏性能优化终极方案:内存调控技术实现帧率突破完整指南
  • EasyHook终极指南:3个简单步骤实现64位系统下的32位程序API钩子
  • GEO分析系统建设:解构大模型搜索的“黑盒”——AI推荐的底层检索与交叉验证机制
  • 字符缓冲流与字节缓冲流的实战对比
  • WorkshopDL终极指南:3分钟掌握跨平台Steam模组下载的完整解决方案
  • Windows系统res-downloader HTTPS证书配置实战:从原理到高级优化的专业指南
  • 3个步骤实现浏览器中魔兽争霸与星际争霸模型渲染的完整指南
  • 黄金回收白银回收铂金回收彩金回收店铺推荐竹溪县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐忠县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY