
uni-use
工具uni-helper 组织出品的 uni-app Vue3 组合式工具集(Composables/Hooks),封装常用小程序能力为 Vue3 Composition API,包含 EventBus、网络状态、剪贴板、系统信息、页面生命周期等 20+ 个开箱即用的 composable,深度适配 uni-app 多端环境
uni-appvue3composablehookscomposition-apitypescriptminiprogram
详细文档
资源概述#
@uni-helper/uni-use 是 uni-helper 开源社区组织出品的 uni-app Vue3 组合式工具集。它将小程序常用能力封装为 Vue3 Composition API 的 composable 函数,让 uni-app 开发者能像使用 VueUse 一样优雅地访问小程序平台 API。
核心特性#
- 20+ 组合式函数:覆盖 UI 交互、网络状态、存储、设备信息、剪贴板、位置等常用场景
- Vue3 Composition API:完美适配
<script setup>语法,自动响应式更新 - TypeScript 原生编写:完整类型定义,IDE 智能提示友好
- 深度适配小程序:处理了小程序环境缺失
window/navigator等全局对象的限制 - EventBus 内置:跨页面/组件通信方案
- unplugin-auto-import 支持:配置后自动导入,无需手动 import
项目数据#
| 指标 | 数值 |
|---|---|
| GitHub Stars | 181⭐ |
| Forks | 19 |
| npm 版本数 | 36(latest: 0.19.17) |
| npm 最后发布 | 2025-11-26 |
| 许可证 | MIT |
| 创建年份 | 2023 |
设计规范#
API 设计哲学#
uni-use 遵循 VueUse 的设计理念,每个 composable 都是一个以 use 开头的函数,返回响应式状态和操作方法:
import { useClipboard, useNetwork, useToast } from '@uni-helper/uni-use'
// 剪贴板
const { text, copy } = useClipboard()
// text 是响应式数据,copy 是异步操作函数
await copy('要复制的内容')
// 网络状态
const { isOnline, networkType } = useNetwork()
// isOnline: Ref<boolean>,网络变化时自动更新
// Toast 提示
const { showToast } = useToast()
showToast({ title: '操作成功', icon: 'success' })
核心 Composable 列表#
| 分类 | 函数 | 说明 |
|---|---|---|
| UI 交互 | useToast | 轻提示 |
useLoading | 加载提示 | |
useModal | 模态对话框 | |
useActionSheet | 操作菜单 | |
| 网络 | useNetwork | 网络状态(类型/是否在线) |
useOnline | 在线状态(简化的 isOnline) | |
| 存储 | useStorage | 响应式本地存储 |
useStorageAsync | 异步本地存储 | |
| 设备 | useSystemInfo | 系统信息(屏幕/状态栏/安全区) |
useDeviceInfo | 设备信息(品牌/型号/系统版本) | |
useVibrate | 震动反馈 | |
useBrightness | 屏幕亮度 | |
| 媒体 | useChooseImage | 选择图片 |
usePreviewImage | 预览图片 | |
| 位置 | useLocation | 获取位置信息 |
| 工具 | useClipboard | 剪贴板读写 |
useMakePhoneCall | 拨打电话 | |
useShare | 转发分享 | |
useShareTimeline | 朋友圈分享 | |
useSetNavigationBarTitle | 动态设置导航栏标题 |
平台限制#
小程序环境与浏览器存在根本差异,uni-use 专门处理了以下限制:
- 缺失全局变量:无
window、navigator、document等对象 - 必须使用 uni API:拦截器、存储等必须通过
uni.*API 实现 - 无法拦截同步 API:部分同步 API 不支持运行时拦截
- 无法监听外部剪贴板变化:小程序剪贴板 API 只能主动读取
- 无顶层 await:小程序环境不支持 top-level await
审核规范#
不适用(工具库,非平台类资源)
开发指南#
安装#
npm install @uni-helper/uni-use @vueuse/core@9
# 或
pnpm add @uni-helper/uni-use @vueuse/core@9
注意:依赖
@vueuse/core@9而非 v10,因 uni-app Vue3 环境兼容性问题。如需使用 v10,请参考 uni-app#4604。
基础用法#
<script setup lang="ts">
import { ref } from 'vue'
import { useClipboard, useNetwork, useStorage, useToast } from '@uni-helper/uni-use'
// 响应式本地存储
const token = useStorage('user_token', '')
// 剪贴板
const { text: clipboardText, copy } = useClipboard()
// 网络状态
const { isOnline, networkType } = useNetwork()
// Toast
const { showToast } = useToast()
const onCopyToken = async () => {
if (!token.value) {
showToast({ title: '未登录', icon: 'none' })
return
}
await copy(token.value)
showToast({ title: '已复制', icon: 'success' })
}
</script>
<template>
<view class="container">
<text>网络状态:{{ isOnline ? '在线' : '离线' }}({{ networkType }})</text>
<text>剪贴板内容:{{ clipboardText || '空' }}</text>
<button @click="onCopyToken">复制 Token</button>
</view>
</template>
配合 unplugin-auto-import#
// vite.config.ts
import { fileURLToPath } from 'node:url'
import uni from '@dcloudio/vite-plugin-uni'
import { uniuseAutoImports } from '@uni-helper/uni-use/unplugin'
import AutoImport from 'unplugin-auto-import/vite'
export default defineConfig({
plugins: [
uni(),
AutoImport({
imports: [
'vue',
uniuseAutoImports(), // 自动导入 uni-use 的所有 composables
],
dts: fileURLToPath(
new URL('./src/auto-imports.d.ts', import.meta.url)
),
}),
],
})
配置后可直接使用,无需手动 import:
<script setup lang="ts">
// 无需 import,自动可用
const { copy } = useClipboard()
const { isOnline } = useNetwork()
</script>
EventBus 跨页面通信#
import { useEventBus } from '@uni-helper/uni-use'
// 页面 A:监听事件
const { on } = useEventBus('user-login')
on((data) => {
console.log('用户已登录', data)
})
// 页面 B:触发事件
const { emit } = useEventBus('user-login')
emit({ userId: 123, name: '张三' })
常见陷阱#
- @vueuse/core 版本:必须使用 v9 而非 v10,否则部分 composable 在小程序端报错
- pnpm 需配置:
.npmrc中设置shamefully-hoist=true - 存储响应式:
useStorage返回的Ref修改后会自动同步到本地存储 - onShow 等生命周期:uni-use 未封装全部页面生命周期,仍需使用
onLoad/onShow等 uni-app 生命周期钩子
生态资源#
uni-helper 组织生态#
uni-use 是 uni-helper 开源组织的核心组件之一,该组织致力于为 uni-app Vue3 生态提供高质量工具:
| 项目 | 说明 | Stars |
|---|---|---|
| unibest | 最佳实践开发模板 | 2186⭐ |
| create-uni | 项目脚手架 | 301⭐ |
| vite-plugin-uni-pages | 文件路由插件 | 205⭐ |
| uni-use | 组合式工具集 | 181⭐ |
| uni-network | HTTP 客户端 | 127⭐ |
| uni-typed | 类型增强 | 86⭐ |
相关项目#
| 项目 | 说明 |
|---|---|
| VueUse | Vue3 组合式工具集(Web 端) |
| taro-hooks | Taro 框架的 Hooks 库(452⭐) |
| vtils/mp | vtils 小程序工具子模块 |
版本更新#
- v0.19.17(2025-11-26):TypeScript 类型修复,新增
useBrightness - v0.19.0(2025-09):新增
useShareTimeline,重构 EventBus 类型 - v0.18.0(2025-06):新增
useMakePhoneCall、useActionSheet;改进useStorage响应式行为 - v0.17.0(2025-03):新增
useLocation,修复useNetwork在 App 端的兼容性 - v0.15.0(2024-12):重大更新,API 对齐 VueUse v9 设计规范