原文摘要
作者:前端开发爱好者
原文:mp.weixin.qq.com/s/x4IkLjoKw…
React 有 ahooks,Vue3 一直用 VueUse。但 ahooks 的开发者一旦切到 Vue3,会发现:
useFetch/useAxios功能单一,只负责“发请求 + 返回数据”;- 缺少 防抖、节流、轮询、缓存-SWR、错误重试 等常见能力;
- 不能插件化,想做全局请求状态管理或跨
Tab广播只能自己封装。
于是,社区出现了新的答案:Vue Hooks Plus。
Vue Hooks Plus 是什么?
一句话:一个专为 Vue3 打造、对标 ahooks 的高性能 Hooks 库,全面覆盖基础 + 进阶场景,插件化扩展,TypeScript 优先。
核心特性一览:
| 特性 | 说明 |
|---|---|
| 🚀 useRequest | 请求中间件,支持 10+ 种高级策略(防抖、SWR、分页、并行…) |
| 🔌 插件体系 | 官方已提供「全局请求状态」「同源跨窗口广播」等插件,可自定义 |
| 🎯 TypeScript | 100 % 类型提示,零配置即享安全 |
| 🪄 按需加载 | Tree-shaking 友好,包体更小 |
| 🎪 交互式 Demo | 官网可在线改代码,实时预览 |
| 🔋 SSR 支持 | Nuxt3 开箱即用,无额外配置 |
Vue Hooks Plus 现已内置 上百个 即拿即用的 Hooks,覆盖日常开发的绝大多数场景;
下面仅以 Hook —— useRequest 为例,带你感受它的威力。
useRequest:一条 Hook 解决 90 % 请求场景
10 种能力,一行配置开关
import { useRequest } from 'vue-hooks-plus'
const { data, loading, run } = useRequest(getUserList, {
paginated: true, // 分页
pollingInterval: 3000, // 轮询
debounceWait: 500, // 防抖
cacheKey: 'user-list', // 缓存 + SWR
retryCount: 3, // 错误重试
loadingDelay: 200 // loading 防闪烁
})
插件示例:跨 Tab 自动同步数据
import { useRequest } from 'vue-hooks-plus'
import { broadcastPlugin } from '@vue-hooks-plus/plugin-broadcast'
const { data } = useRequest(getUserList, {
plugins: [broadcastPlugin({ name: 'userList' })]
})
当用户在 A 标签页刷新列表,B 标签页实时同步,零后端成本。
组件级 Hook
用官方提供的 createUseRequestComponent 工厂函数,3 步就能把“请求 + Loading + 错误 + 视图”封装成可复用组件:
- 生成
export const UseUserCard = createUseRequestComponent<User>()
- 使用
<UseUserCard :service="getUser" v-slot="{ data, loading }">
<Skeleton v-if="loading"/>
<UserCard v-else :user="data"/>
</UseUserCard>
- 类型自动推到 slot,支持分页、弹窗、表单等任何场景。
从安装到部署 3 分钟
安装
npm i vue-hooks-plus
# 或
pnpm add vue-hooks-plus
自动引入(推荐)
// vite.config.ts
import AutoImport from 'unplugin-auto-import/vite'
import { VueHooksPlusResolver } from '@vue-hooks-plus/resolvers'
export default defineConfig({
plugins: [
AutoImport({
resolvers: [VueHooksPlusResolver()]
})
]
})
此后任何组件可直接使用 useRequest 等 Hooks,无需手动 import。
性能 & 体积对比
| 指标 | VueHooks Plus | VueUse |
|---|---|---|
| gzip 体积(常用 5 个 Hook) | ~ 5.8 KB | ~ 9.3 KB |
| 首屏加载 | 按需加载 | 按需加载 |
| SSR 兼容性 | ✅ 官方验证 | ✅ |
| 插件扩展 | ✅ | ❌ |
写在最后
如果你正在 Vue3 项目中:
- 受够了手写
请求防抖/缓存/重试逻辑; - 想要
轻量、可插拔、TypeScript完整的 Hooks 工具箱; - 或者从
React切过来,怀念ahooks的爽感;
VueHooks Plus 值得你 今天 就试一试!
- 📖 官方文档(中/英) :inhiblabcore.github.io/vue-hooks-p…
- 🧩 源码 & Issues:github.com/InhiblabCor…
进一步信息揣测
- VueUse的局限性:Vue3生态中原有的VueUse库在复杂场景(如防抖、节流、轮询、缓存等)功能不足,且缺乏插件化扩展能力,开发者需自行封装,增加了开发成本。
- 社区新解决方案的出现背景:Vue Hooks Plus的诞生直接针对ahooks开发者切换到Vue3时的痛点,填补了Vue3生态中高阶Hooks库的空白,属于“需求倒逼创新”的案例。
- useRequest的隐藏优势:其内置的10+种高级策略(如分页、SWR缓存、错误重试)通常需要开发者自行实现或组合多个库,而Vue Hooks Plus通过一行配置即可实现,大幅降低复杂度。
- 插件体系的内部价值:官方提供的“跨Tab广播”插件暗示了企业级应用中多窗口状态同步的需求,这类功能通常需依赖LocalStorage或BroadcastChannel API手动实现,现成插件可节省大量调试时间。
- 性能优化细节:库强调“按需加载”和“Tree-shaking友好”,暗示其底层设计可能采用模块化分包策略,这对大型项目减少打包体积有显著意义,但具体实现需查阅源码验证。
- SSR支持的隐含成本:声称“Nuxt3开箱即用”可能隐藏了其他SSR框架(如Next.js)的适配成本,实际使用时需注意框架兼容性。
- TypeScript的深度整合:“零配置即享安全”可能意味着库内部对泛型或类型推断做了优化,但复杂场景(如动态插件类型)仍需开发者额外配置,需实际测试类型提示的完备性。
- 竞品对比未明说的点:文中未直接提及但隐含的ahooks优势(如React生态成熟度)和Vue Hooks Plus的潜在劣势(如社区规模小、长期维护风险),属于需谨慎评估的水下信息。
- 企业级应用暗示:全局请求状态管理和跨Tab同步等功能设计,表明库的目标用户是中大型项目,而非简单小应用,这可能带来更高的学习成本和团队协作规范要求。
- 文档与Demo的隐性价值:交互式Demo的存在通常反映团队对开发者体验的重视,但可能掩盖了实际业务场景与Demo的复杂度差距,需结合真实项目验证。