▶_MiniApp Toolkit

uni-use

工具

uni-helper 组织出品的 uni-app Vue3 组合式工具集(Composables/Hooks),封装常用小程序能力为 Vue3 Composition API,包含 EventBus、网络状态、剪贴板、系统信息、页面生命周期等 20+ 个开箱即用的 composable,深度适配 uni-app 多端环境

uni-appvue3composablehookscomposition-apitypescriptminiprogram

详细文档

资源概述#

@uni-helper/uni-useuni-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 Stars181⭐
Forks19
npm 版本数36(latest: 0.19.17)
npm 最后发布2025-11-26
许可证MIT
创建年份2023

设计规范#

API 设计哲学#

uni-use 遵循 VueUse 的设计理念,每个 composable 都是一个以 use 开头的函数,返回响应式状态和操作方法:

code
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 专门处理了以下限制:

  • 缺失全局变量:无 windownavigatordocument 等对象
  • 必须使用 uni API:拦截器、存储等必须通过 uni.* API 实现
  • 无法拦截同步 API:部分同步 API 不支持运行时拦截
  • 无法监听外部剪贴板变化:小程序剪贴板 API 只能主动读取
  • 无顶层 await:小程序环境不支持 top-level await

审核规范#

不适用(工具库,非平台类资源)

开发指南#

安装#

code
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

基础用法#

code
<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#

code
// 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:

code
<script setup lang="ts">
// 无需 import,自动可用
const { copy } = useClipboard()
const { isOnline } = useNetwork()
</script>

EventBus 跨页面通信#

code
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: '张三' })

常见陷阱#

  1. @vueuse/core 版本:必须使用 v9 而非 v10,否则部分 composable 在小程序端报错
  2. pnpm 需配置.npmrc 中设置 shamefully-hoist=true
  3. 存储响应式useStorage 返回的 Ref 修改后会自动同步到本地存储
  4. 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-networkHTTP 客户端127⭐
uni-typed类型增强86⭐

相关项目#

项目说明
VueUseVue3 组合式工具集(Web 端)
taro-hooksTaro 框架的 Hooks 库(452⭐)
vtils/mpvtils 小程序工具子模块

版本更新#

  • v0.19.17(2025-11-26):TypeScript 类型修复,新增 useBrightness
  • v0.19.0(2025-09):新增 useShareTimeline,重构 EventBus 类型
  • v0.18.0(2025-06):新增 useMakePhoneCalluseActionSheet;改进 useStorage 响应式行为
  • v0.17.0(2025-03):新增 useLocation,修复 useNetwork 在 App 端的兼容性
  • v0.15.0(2024-12):重大更新,API 对齐 VueUse v9 设计规范