Skip to content

参考 ​

基于 VueUse v14.3.0(2026-05)。本页是速查工具——包含 @vueuse/core 12 大分类全部 211 个函数表、10 个 add-on 包全部 59 个函数表、常用 composable 详细参数 / 选项速查、核心约定(MaybeRef / toValue / controls / isSupported)、TypeScript 类型、自动导入配置。

速查 ​

  • 核心包:@vueuse/core(211 个函数,覆盖 12 大分类,已含 @vueuse/shared 的工具函数)
  • add-on 包:@vueuse/router / integrations / math / motion / rxjs / firebase / electron / sound / schema-org(按需安装,各自独立 npm 包)
  • 命名约定:useXxx 返回响应式状态的 composable,onXxx 注册事件型监听,createXxx 工厂函数,tryOnXxx 安全生命周期钩子
  • 入参约定:大多数函数接受 MaybeRefOrGetter<T>——可传普通值、ref、computed 或 getter 函数,内部用 toValue() 解包
  • 返回约定:返回单个状态用 ref;返回多状态用对象(可解构);带控制能力的返回 { ...state, pause, resume, ... } 或通过 controls: true 选项开启
  • 能力探测:浏览器 API 类函数返回 isSupported(ComputedRef<boolean>),调用前应判断
  • SSR 友好:绝大多数函数 SSR 安全,浏览器 API 在服务端降级为惰性值
  • 副作用清理:在组件作用域内自动注册 onScopeDispose 清理,无需手动解绑
  • Vue 兼容:Vue 3.x(v14 起不再支持 Vue 2)

@vueuse/core 12 大分类完整函数表 ​

State(状态,15) ​

函数说明
createGlobalState把状态保持在全局作用域,跨组件复用
createInjectionState创建可注入的状态,封装 provide / inject 对
createSharedComposable让 composable 在多个调用方间共享同一份状态
injectLocal增强版 inject,支持在同组件内 provideLocal 后立即取值
provideLocal增强版 provide,可在同组件内被 injectLocal 取到
useAsyncState处理异步状态,暴露 state / isLoading / isReady / execute
useDebouncedRefHistory带防抖的 ref 历史记录
useLastChanged记录某个 ref 最后一次变化的时间戳
useLocalStorage响应式 localStorage(useStorage 的预设)
useManualRefHistory手动调用 commit() 才记录的 ref 历史
useRefHistory跟踪 ref 变更历史,支持撤销 / 重做
useSessionStorage响应式 sessionStorage(useStorage 的预设)
useStorage响应式 Web Storage(local / session),自动序列化
useStorageAsync响应式存储的异步版本(支持异步 storage)
useThrottledRefHistory带节流的 ref 历史记录

Elements(元素,15) ​

函数说明
useActiveElement响应式获取 document.activeElement
useDocumentVisibility响应式 document.visibilityState
useDraggable让元素可拖拽,返回坐标与样式
useDropZone创建拖放区域,处理文件 / 数据投放
useElementBounding响应式获取元素的 getBoundingClientRect()
useElementSize响应式获取元素宽高(基于 ResizeObserver)
useElementVisibility元素是否进入视口可见
useIntersectionObserver封装 IntersectionObserver 监听元素交叉状态
useMouseInElement鼠标相对某元素的位置与是否在内部
useMutationObserver封装 MutationObserver 监听 DOM 变更
useParentElement响应式获取元素的父节点
useResizeObserver封装 ResizeObserver 监听尺寸变化
useWindowFocus窗口是否处于聚焦状态
useWindowScroll响应式 window 滚动位置
useWindowSize响应式 window 宽高

Browser(浏览器,41) ​

函数说明
useBluetooth封装 Web Bluetooth API
useBreakpoints响应式断点判断(内置 Tailwind / Bootstrap 等预设)
useBroadcastChannel封装 BroadcastChannel 实现同源标签页通信
useBrowserLocation响应式 window.location
useClipboard读写系统剪贴板(文本)
useClipboardItems读写剪贴板(支持富类型 ClipboardItem)
useColorMode颜色模式管理(auto / light / dark / 自定义)
useCssVar响应式读写 CSS 自定义属性(变量)
useDark响应式深色模式开关,自动持久化
useEventListener安全地添加事件监听,自动解绑
useEyeDropper封装 EyeDropper 屏幕取色 API
useFavicon响应式修改页面 favicon
useFileDialog以编程方式打开文件选择对话框
useFileSystemAccess封装 File System Access API(读写本地文件)
useFullscreen进入 / 退出全屏
useGamepad封装 Gamepad API 读取手柄状态
useImage响应式加载图片,暴露加载状态
useMediaControls控制 <audio> / <video> 播放(进度、音量等)
useMediaQuery响应式 CSS 媒体查询匹配
useMemory响应式读取 performance.memory 内存信息
useObjectUrl为 Blob / File 创建并自动回收 Object URL
usePerformanceObserver封装 PerformanceObserver 监听性能条目
usePermission响应式查询 Permissions API 权限状态
usePreferredColorScheme用户系统颜色偏好(light / dark / no-preference)
usePreferredContrast用户系统对比度偏好
usePreferredDark用户系统是否偏好深色
usePreferredLanguages用户系统语言偏好列表
usePreferredReducedMotion用户是否偏好减少动画
usePreferredReducedTransparency用户是否偏好减少透明度
useScreenOrientation响应式屏幕方向与锁定
useScreenSafeArea响应式读取屏幕安全区域 inset
useScriptTag动态注入 <script> 标签并跟踪加载
useShare封装 Web Share API 调起系统分享
useSSRWidth为 SSR 提供视口宽度,供断点等函数使用
useStyleTag动态注入 <style> 标签
useTextareaAutosize文本域随内容自动调整高度
useTextDirection响应式读写文本方向(ltr / rtl)
useTitle响应式读写 document.title
useUrlSearchParams响应式读写 URL 查询参数
useVibrate封装 Vibration API 触发设备震动
useWakeLock封装 Screen Wake Lock 防止屏幕休眠
useWebNotification封装 Notification API 发送桌面通知
useWebWorker简化 Web Worker 通信
useWebWorkerFn在 Web Worker 中运行函数,不阻塞主线程

Sensors(传感器,38) ​

函数说明
onClickOutside监听元素外部的点击
onElementRemoval监听元素从 DOM 被移除
onKeyStroke监听键盘按键
onLongPress监听元素长按
onStartTyping监听用户开始打字(非输入框聚焦时)
useBattery响应式电池状态(电量、充电中)
useDeviceMotion响应式设备运动加速度数据
useDeviceOrientation响应式设备方向(陀螺仪)
useDevicePixelRatio响应式 devicePixelRatio
useDevicesList响应式枚举媒体输入 / 输出设备
useDisplayMedia封装 getDisplayMedia(屏幕共享流)
useElementByPoint获取指定坐标处的元素
useElementHover元素是否处于悬停状态
useFocus响应式读写元素聚焦状态
useFocusWithin元素或其后代是否聚焦
useFps响应式帧率(FPS)
useGeolocation响应式地理位置定位
useIdle检测用户是否空闲
useInfiniteScroll滚动到底部时触发加载更多
useKeyModifier响应式修饰键状态(CapsLock / NumLock 等)
useMagicKeys响应式按键映射,支持组合键
useMouse响应式鼠标坐标
useMousePressed鼠标 / 触摸是否按下
useNavigatorLanguage响应式 navigator.language
useNetwork响应式网络连接状态(类型、速率)
useOnline响应式在线 / 离线状态
usePageLeave检测鼠标是否离开页面
useParallax创建视差滚动 / 倾斜效果
usePointer响应式指针(鼠标 / 触摸 / 笔)状态
usePointerLock封装 Pointer Lock API
usePointerSwipe基于 Pointer 事件的滑动检测
useScroll响应式元素滚动位置与方向
useScrollLock锁定 / 解锁元素滚动
useSpeechRecognition封装语音识别 API
useSpeechSynthesis封装语音合成 API(文字转语音)
useSwipe基于 Touch 事件的滑动检测
useTextSelection响应式获取用户选中的文本
useUserMedia封装 getUserMedia(摄像头 / 麦克风流)

Network(网络,3) ​

函数说明
useEventSource封装 EventSource(SSE 服务器推送)
useFetch响应式封装 fetch,支持中断、重取、拦截器
useWebSocket封装 WebSocket,支持自动重连与心跳

Animation(动画,9) ​

函数说明
useAnimate封装 Web Animations API
useInterval响应式自增计数器,按固定间隔递增
useIntervalFn按固定间隔执行回调,可暂停 / 恢复
useNow响应式当前 Date 对象
useRafFn在每帧 requestAnimationFrame 中执行回调
useTimeout在指定延迟后将状态置为 ready
useTimeoutFn在指定延迟后执行回调,可取消
useTimestamp响应式当前时间戳
useTransition在数值变化间做过渡补间动画

Component(组件,16) ​

函数说明
computedInject结合 inject 与 computed
createReusableTemplate在同一组件内定义并复用模板片段
createTemplatePromise用模板渲染 Promise 式交互(如确认弹窗)
templateRef用字符串名绑定模板引用
tryOnBeforeMount安全调用 onBeforeMount(作用域外不报错)
tryOnBeforeUnmount安全调用 onBeforeUnmount
tryOnMounted安全调用 onMounted
tryOnScopeDispose安全调用 onScopeDispose
tryOnUnmounted安全调用 onUnmounted
unrefElement从 ref / 组件实例中取出真实 DOM 元素
useCurrentElement获取当前组件的根 DOM 元素
useMounted响应式判断组件是否已挂载
useTemplateRefsList在 v-for 中收集一组模板引用
useVirtualList长列表虚拟滚动
useVModel简化单个 v-model 双向绑定的封装
useVModels简化多个 v-model 双向绑定的封装

Watch(侦听,13) ​

函数说明
until等待状态满足条件的 Promise 化侦听
watchArray侦听数组的新增 / 删除元素
watchAtMost最多触发 N 次后停止的侦听
watchDebounced带防抖的 watch
watchDeep默认 deep: true 的 watch
watchIgnorable可临时忽略触发的 watch
watchImmediate默认 immediate: true 的 watch
watchOnce只触发一次的 watch
watchPausable可暂停 / 恢复的 watch
watchThrottled带节流的 watch
watchTriggerable可手动触发的 watch
watchWithFilter带自定义事件过滤器的 watch
whenever当值变为真值时执行回调的 watch 简写

Reactivity(响应性,20) ​

函数说明
computedAsync支持异步求值的 computed
computedEager不带惰性、立即求值的 computed
computedWithControl显式控制重新求值时机的 computed
createRef创建可选深 / 浅的 ref
extendRef给 ref 附加额外属性
reactify把普通函数转为接受响应式入参的函数
reactifyObject对对象上所有方法批量 reactify
reactiveComputed返回 reactive 对象的 computed
reactiveOmit响应式地剔除对象部分字段
reactivePick响应式地挑选对象部分字段
refAutoReset一段时间后自动复位为默认值的 ref
refDebounced带防抖的 ref
refDefault为 ref 提供默认值(null / undefined 时)
refThrottled带节流的 ref
refWithControl可精细控制读写的 ref
syncRef双向同步两个 ref
syncRefs将一个源 ref 单向同步到多个目标 ref
toReactive把 ref 转为 reactive 对象
toRef标准化为 ref(值 / getter / 对象属性皆可)
toRefs增强版 toRefs,支持解构数组与对象

Array(数组,12) ​

函数说明
useArrayDifference响应式数组差集
useArrayEvery响应式 Array.every
useArrayFilter响应式 Array.filter
useArrayFind响应式 Array.find
useArrayFindIndex响应式 Array.findIndex
useArrayFindLast响应式 Array.findLast
useArrayIncludes响应式 Array.includes
useArrayJoin响应式 Array.join
useArrayMap响应式 Array.map
useArrayReduce响应式 Array.reduce
useArraySome响应式 Array.some
useArrayUnique响应式数组去重
useSorted响应式数组排序

Time(时间,4) ​

函数说明
useCountdown倒计时计时器,暴露剩余秒数与控制方法
useDateFormat按格式串格式化日期(类 dayjs 语法)
useTimeAgo响应式相对时间(如「3 分钟前」)
useTimeAgoIntl基于 Intl.RelativeTimeFormat 的相对时间

Utilities(工具,25) ​

函数说明
createEventHook创建可订阅的事件钩子(on / trigger)
createUnrefFn把接受 ref 入参的函数转为自动解包版本
get取出 ref 的值(unref 的简写)
isDefined类型守卫,判断 ref 值非 null / undefined
makeDestructurable让对象同时支持对象与数组两种解构
set设置 ref 的值
useAsyncQueue顺序执行一组异步任务
useBase64把字符串 / 文件 / 图片转为 Base64
useCached带自定义比较的缓存 ref
useCloned创建响应式克隆,支持手动 / 自动同步
useConfirmDialog用 Promise 管理确认对话框的显隐与结果
useCounter计数器,带 inc / dec / set / reset
useCycleList在列表中循环切换当前项
useDebounceFn创建防抖函数
useEventBus轻量事件总线
useMemoize缓存函数计算结果(记忆化)
useOffsetPagination偏移分页状态管理
usePrevious记录 ref 的上一个值
useStepper多步骤流程(向导)状态管理
useSupported把能力探测结果包成响应式 isSupported
useThrottleFn创建节流函数
useTimeoutPoll用 timeout 实现的轮询(上次完成后再等待)
useToggle布尔值切换器
useToNumber把字符串 ref 响应式转为数字
useToString把任意 ref 响应式转为字符串

10 个 add-on 包函数表 ​

每个 add-on 是独立 npm 包,需单独安装,如 pnpm add @vueuse/router。

@vueuse/router(路由,3) ​

依赖 vue-router。需安装:@vueuse/router。

函数说明
useRouteHash响应式读写路由 hash
useRouteParams响应式读写路由 params
useRouteQuery响应式读写路由 query

@vueuse/integrations(第三方集成,12) ​

各函数依赖对应第三方库(需自行安装 peer 依赖)。需安装:@vueuse/integrations。

函数依赖库说明
useAsyncValidatorasync-validator异步表单校验
useAxiosaxios响应式封装 axios 请求
useChangeCasechange-case响应式字符串大小写转换
useCookiesuniversal-cookie响应式读写 Cookie
useDrauudrauu集成 drauu SVG 绘图
useFocusTrapfocus-trap焦点陷阱(弹窗内锁定 Tab 焦点)
useFusefuse.js模糊搜索
useIDBKeyvalidb-keyval响应式 IndexedDB 键值存储
useJwtjwt-decode解码 JWT
useNProgressnprogress控制 NProgress 顶部进度条
useQRCodeqrcode生成二维码 DataURL
useSortablesortablejs列表拖拽排序

@vueuse/math(数学,18) ​

需安装:@vueuse/math。

函数说明
createGenericProjection创建自定义投影函数
createProjection创建数值区间投影函数
logicAnd响应式逻辑「与」
logicNot响应式逻辑「非」
logicOr响应式逻辑「或」
useAbs响应式 Math.abs
useAverage响应式求平均值
useCeil响应式 Math.ceil
useClamp把响应式数值钳制在区间内
useFloor响应式 Math.floor
useMax响应式求最大值
useMin响应式求最小值
usePrecision响应式设置数值精度
useProjection把数值从一个区间映射到另一个区间
useRound响应式 Math.round
useSum响应式求和
useTrunc响应式 Math.trunc

@vueuse/motion(动画,6) ​

需安装:@vueuse/motion。

函数说明
useElementStyle响应式同步元素 style
useElementTransform响应式同步元素 transform
useMotion给元素施加声明式动画
useMotionProperties读写元素的可动画属性
useMotionVariants管理动画变体(variants)
useSpring弹簧物理动画

@vueuse/rxjs(RxJS 集成,7) ​

依赖 rxjs。需安装:@vueuse/rxjs。

函数说明
from把 ref / watch 源转为 Observable
toObserver把 ref 转为 Observer(语法糖)
useExtractedObservable从依赖中提取并订阅 Observable
useObservable把 Observable 转为响应式 ref
useSubject把 RxJS Subject 双向绑定为 ref
useSubscription自动管理订阅生命周期
watchExtractedObservable侦听从依赖提取出的 Observable

@vueuse/firebase(Firebase 集成,3) ​

依赖 firebase。需安装:@vueuse/firebase。

函数说明
useAuth响应式 Firebase 认证状态
useFirestore响应式订阅 Firestore 文档 / 集合
useRTDB响应式订阅 Realtime Database

@vueuse/electron(Electron 集成,5) ​

依赖 Electron 运行环境。需安装:@vueuse/electron。

函数说明
useIpcRenderer封装 ipcRenderer 通信
useIpcRendererInvoke响应式封装 ipcRenderer.invoke
useIpcRendererOn监听 ipcRenderer 事件
useZoomFactor响应式读写窗口缩放因子
useZoomLevel响应式读写窗口缩放级别

@vueuse/sound(音效,1) ​

需安装:@vueuse/sound。

函数说明
useSound播放音效,控制音量 / 速率 / 播放状态

@vueuse/schema-org(结构化数据,2) ​

需安装:@vueuse/schema-org。

函数说明
createSchemaOrg创建 Schema.org 结构化数据插件
useSchemaOrg在页面注入 Schema.org JSON-LD

@vueuse/head(已迁移) ​

历史上的 createHead / useHead 已独立为 @unhead/vue,新项目请直接使用 @unhead/vue,不再用 @vueuse/head。

常用 composable 详细速查 ​

useStorage ​

ts
useStorage<T>(
  key: MaybeRefOrGetter<string>,
  defaults: MaybeRefOrGetter<T>,
  storage?: StorageLike,            // 默认 localStorage
  options?: UseStorageOptions<T>,
): RemovableRef<T>

UseStorageOptions:

选项类型默认说明
deepbooleantrue深度侦听对象 / 数组变化
listenToStorageChangesbooleantrue监听 storage 事件,跨标签页同步
writeDefaultsbooleantruestorage 无值时写入默认值
mergeDefaultsboolean / functionfalse把默认值与已存值合并(对象新增字段时有用)
serializerSerializer<T>按类型自动推断自定义序列化({ read, write })
onError(e) => voidconsole.error错误回调
shallowbooleanfalse用 shallowRef 代替 ref
initOnMountedbooleanfalse延迟到 onMounted 再读取(SSR 水合一致)
flush'pre' / 'post' / 'sync''pre'侦听写回的 flush 时机

返回 RemovableRef<T>:把它设为 null 会从 storage 删除该键。useLocalStorage / useSessionStorage 是预绑定 storage 的快捷方式。

useFetch ​

ts
useFetch<T>(url: MaybeRefOrGetter<string>): UseFetchReturn<T> & PromiseLike<...>
useFetch<T>(url, useFetchOptions): ...
useFetch<T>(url, requestInit, useFetchOptions?): ...

UseFetchOptions:

选项类型默认说明
fetchtypeof fetchwindow.fetch自定义 fetch 实现
immediatebooleantrue初始化时立即请求
refetchMaybeRefOrGetter<boolean>falseURL / payload 变化时自动重取
initialDataanynulldata 的初始值
timeoutnumber0超时毫秒数(0 = 不超时)
updateDataOnErrorbooleanfalse出错时是否仍更新 data
beforeFetch(ctx) => ...-请求前拦截器(改 url / options / 取消)
afterFetch(ctx) => ...-成功后拦截器(改 data)
onFetchError(ctx) => ...-失败拦截器(改 data / error)

UseFetchReturn:

成员类型说明
dataShallowRef<T | null>响应体(JSON / 文本)
responseShallowRef<Response | null>原始 Response
errorShallowRef<any>错误对象
statusCodeShallowRef<number | null>HTTP 状态码
isFetchingReadonly<ShallowRef<boolean>>是否请求中
isFinishedReadonly<ShallowRef<boolean>>是否已完成
canAbortComputedRef<boolean>是否可中断
abortedShallowRef<boolean>是否已中断
abort(reason?)function中断请求
execute(throwOnFailed?)() => Promise手动触发请求
onFetchResponse / onFetchError / onFetchFinallyEventHook事件回调注册

链式方法:.get() / .post(payload?, type?) / .put() / .delete() / .patch() / .head() / .options() 设置请求方法;.json<T>() / .text() / .blob() / .arrayBuffer() / .formData() 设置响应解析方式。返回值可 await。

useDark / useColorMode ​

ts
useDark(options?: UseDarkOptions): WritableComputedRef<boolean>
useColorMode(options?: UseColorModeOptions): WritableComputedRef<...>

UseDarkOptions(继承 UseColorModeOptions):

选项类型默认说明
selectorstring'html'应用模式的目标元素
attributestring'class'要修改的属性名
valueDarkstring'dark'isDark=true 时写入的值
valueLightstring''isDark=false 时写入的值
storageKeystring / null'vueuse-color-scheme'持久化键名(null 不持久化)
storageStorageLikelocalStorage持久化存储
onChangedfunction-自定义模式应用逻辑

UseColorModeOptions(额外):

选项类型默认说明
modesRecord<string,string>{}自定义模式与对应属性值
emitAutobooleanfalsestore 暴露 'auto',并新增 system / state
disableTransitionbooleantrue切换时禁用 CSS 过渡,避免闪烁
initialValuestring'auto'初始模式

useColorMode 返回的 WritableComputedRef 上附带 system(系统偏好)、store(原始存值)、state(含 auto)等属性。

useMouse ​

ts
useMouse(options?: UseMouseOptions): { x, y, sourceType }
选项类型默认说明
type'page' / 'client' / 'screen' / 'movement' / 函数'page'坐标系
targetWindow / EventTarget / refwindow监听目标
touchbooleantrue同时监听 touchmove
scrollbooleantrue监听滚动(仅 page 坐标系)
resetOnTouchEndsbooleanfalsetouchend 时复位
initialValue{ x, y }{x:0,y:0}初始坐标

返回 x / y(Ref<number>)、sourceType('mouse' / 'touch' / null)。

useElementSize / useElementBounding ​

ts
useElementSize(
  target: MaybeComputedElementRef,
  initialSize?: { width, height },
  options?: { box?: 'content-box' | 'border-box' | 'device-pixel-content-box' },
): { width: Ref<number>, height: Ref<number> }

useElementBounding(target, options?): {
  width, height, top, right, bottom, left, x, y, update
}

useElementSize 基于 ResizeObserver;useElementBounding 返回 getBoundingClientRect() 全字段并暴露 update() 手动刷新。updateTiming 选项可设 'sync' / 'next-frame'。

useIntersectionObserver ​

ts
useIntersectionObserver(
  target: MaybeComputedElementRef | MaybeComputedElementRef[],
  callback: IntersectionObserverCallback,
  options?: UseIntersectionObserverOptions,
): { isSupported, isActive, pause, resume, stop }
选项类型默认说明
rootMaybeComputedElementRefnull视口根元素
rootMarginstring'0px'根边距
thresholdnumber / number[]0触发阈值
immediatebooleantrue立即开始观察

useEventListener ​

ts
// 多种重载,自动在作用域销毁时解绑
useEventListener(target, event, listener, options?)
useEventListener(event, listener, options?)            // 默认 target = window
  • target:window / document / ref / EventTarget,可省略
  • event:事件名或事件名数组
  • listener:回调或回调数组
  • options:AddEventListenerOptions(capture / passive / once)
  • 返回 stop() 函数手动解绑

onClickOutside ​

ts
onClickOutside(
  target: MaybeElementRef,
  handler: (evt: PointerEvent) => void,
  options?: { ignore?, capture?, detectIframe?, controls? },
): () => void   // 返回 stop
选项类型默认说明
ignore(元素 / ref / 选择器)[][]忽略这些元素的点击
capturebooleantrue捕获阶段监听
detectIframebooleanfalse把点击 iframe 也算作外部

useClipboard ​

ts
useClipboard(options?: UseClipboardOptions): {
  isSupported, text, copied, copy, source
}
选项类型默认说明
sourceMaybeRefOrGetter<string>-要复制的默认文本源
readbooleanfalse是否监听并读取剪贴板内容
copiedDuringnumber1500copied 保持 true 的毫秒数
legacybooleanfalse无 Clipboard API 时降级到 execCommand

copy(text?) 复制文本;copied 在 copiedDuring 内为 true,常用于「已复制」提示。

useToggle ​

ts
useToggle(initialValue?: boolean): [Ref<boolean>, (value?: boolean) => boolean]
useToggle(ref: Ref<T>, options?: { truthyValue, falsyValue }): (value?) => T

传布尔值返回 [state, toggle] 元组;传已有 ref 只返回 toggle 函数。

useCounter ​

ts
useCounter(initialValue?: number, options?: { min?, max? }): {
  count: Ref<number>,
  inc: (delta?: number) => void,
  dec: (delta?: number) => void,
  get: () => number,
  set: (val: number) => void,
  reset: (val?: number) => void,
}

useDebounceFn / useThrottleFn ​

ts
useDebounceFn(fn, ms?, options?: { maxWait?, rejectOnCancel? }): 防抖函数
useThrottleFn(fn, ms?, trailing?, leading?, rejectOnCancel?): 节流函数
  • ms:MaybeRefOrGetter<number>,等待 / 间隔毫秒数
  • 防抖 maxWait:最长等待时间上限
  • 节流 leading / trailing:是否在区间首 / 尾调用
  • 配套 refDebounced / refThrottled 直接产出防抖 / 节流 ref

useBreakpoints ​

ts
const bp = useBreakpoints(breakpoints, options?)
  • 内置预设:breakpointsTailwind / breakpointsBootstrapV5 / breakpointsAntDesign / breakpointsVuetifyV3 / breakpointsMasterCss / breakpointsPrimeFlex / breakpointsQuasar / breakpointsSematic
  • 返回对象:bp.greaterOrEqual('md') / bp.smaller('lg') / bp.between('sm','lg') / bp.isGreater(...) / bp.current() / bp.active(),并可用 bp.md(Ref<boolean>)直接判断
  • options.strategy:'min-width'(默认)/ 'max-width'

useVModel / useVModels ​

ts
useVModel(props, key?, emit?, options?: {
  passive?, eventName?, deep?, defaultValue?, clone?, shouldEmit?
}): Ref
useVModels(props, emit?, options?): 各 prop 的 ref 对象
  • passive: true:内部维护本地状态,仅在变更时 emit(默认 false 直接透传)
  • eventName:自定义 emit 事件名(默认 update:key)
  • Vue 3.4+ 也可直接用 defineModel(),useVModel 适合兼容旧写法或需要 passive 行为

useScroll ​

ts
const { x, y, isScrolling, arrivedState, directions, measure }
  = useScroll(element, options?)
选项类型默认说明
throttlenumber0滚动事件节流毫秒
idlenumber200停止滚动判定延迟
offset{ top, bottom, left, right }全 0arrivedState 的边缘偏移
behavior'auto' / 'smooth''auto'设置 x/y 时的滚动行为
onScroll / onStopfunction-滚动 / 停止回调

arrivedState 含 top/bottom/left/right 是否到边;directions 含四个方向布尔值;x/y 可写以编程滚动。

useRefHistory ​

ts
const { history, undo, redo, canUndo, canRedo, clear, commit, pause, resume }
  = useRefHistory(source, options?)
选项类型默认说明
deepbooleanfalse深度侦听
flush'pre'/'post'/'sync''pre'记录时机
capacitynumber无限历史记录上限
cloneboolean / functionfalse记录时克隆值(对象需开启)
dump / parsefunction-自定义序列化快照

history 是 { snapshot, timestamp }[];配套 useDebouncedRefHistory / useThrottledRefHistory / useManualRefHistory。

useAsyncState ​

ts
const { state, isReady, isLoading, error, execute }
  = useAsyncState(promiseOrFn, initialState, options?)
选项类型默认说明
immediatebooleantrue立即执行
delaynumber0执行前延迟毫秒
resetOnExecutebooleantrue重新执行时先重置为初值
shallowbooleantrue用 shallowRef
throwErrorbooleanfalse失败时抛出而非吞掉
onError / onSuccessfunction-结果回调

useIntervalFn / useTimeoutFn ​

ts
const { isActive, pause, resume } = useIntervalFn(callback, interval?, options?)
const { isPending, start, stop } = useTimeoutFn(callback, delay?, options?)
  • interval / delay:MaybeRefOrGetter<number>
  • 共同选项 immediate(是否立即启动,默认 true)、immediateCallback(启动时是否立即执行一次回调)

核心约定速查 ​

MaybeRef 与 MaybeRefOrGetter ​

ts
type MaybeRef<T>          = T | Ref<T>
type MaybeRefOrGetter<T>  = T | Ref<T> | (() => T)   // VueUse 大多数入参类型
  • 调用方可传普通值、ref、computed、getter 函数,无需手动 .value
  • 函数内部统一用 Vue 内置的 toValue()(旧称 resolveUnref)解包
  • 写自定义 composable 时入参也应优先用 MaybeRefOrGetter<T>

toValue ​

ts
import { toValue } from 'vue'   // VueUse 也再导出

toValue(1)           // 1
toValue(ref(1))      // 1
toValue(() => 1)     // 1

把 MaybeRefOrGetter 归一为真实值。get / set(来自 @vueuse/core)是 unref 取值 / 赋值的简写工具。

controls 选项 ​

部分函数(如 useTimestamp / useNow / useDateFormat 经 controls 触发)支持 { controls: true }:

  • 不开启 → 直接返回单个 ref(最简用法)
  • 开启 → 返回 { <值>, pause, resume, ... } 对象,便于精细控制

isSupported ​

浏览器 API 类函数返回对象含 isSupported: ComputedRef<boolean>:

ts
const { isSupported, share } = useShare()
if (isSupported.value) share({ title: '...', url: '...' })

SSR 或不支持的环境下相关功能静默降级,应在调用前判断。

configurableWindow / configurableDocument ​

涉及全局对象的函数接受 window / document 选项,便于在 iframe、测试或多窗口场景注入自定义全局对象:

ts
useEventListener('resize', fn, { /* ... */ })
useMediaQuery('(min-width: 768px)', { window: customWindow })

生命周期与作用域 ​

  • 在组件 setup 或 effectScope 内调用 → 自动 onScopeDispose 清理副作用
  • 作用域外调用 → tryOnMounted / tryOnScopeDispose 等 tryOnXxx 不会报错,静默跳过
  • createSharedComposable 让 composable 只初始化一次、引用计数归零后自动清理

TypeScript 类型速查 ​

ts
import type {
  MaybeRef,
  MaybeRefOrGetter,
  MaybeComputedElementRef,
  RemovableRef,
  UseStorageOptions,
  UseFetchReturn,
  UseFetchOptions,
  UseDarkOptions,
  UseColorModeOptions,
  UseScrollOptions,
  UseElementSizeOptions,
  UseIntersectionObserverOptions,
  EventHook,
  EventHookOn,
  Fn,
  Stoppable,
  Pausable,
} from '@vueuse/core'
类型含义
MaybeRef<T>T | Ref<T>
MaybeRefOrGetter<T>T | Ref<T> | (() => T)
MaybeComputedElementRef元素 / ref / 组件实例,经 unrefElement 取真实 DOM
RemovableRef<T>可设为 null 以移除底层存储的 ref(useStorage 返回)
Stoppable{ isPending, start, stop }(useTimeoutFn 等)
Pausable{ isActive, pause, resume }(useIntervalFn 等)
EventHook<T>{ on, off, trigger, clear }(createEventHook 返回)
Fn() => void 通用无参函数别名
ts
// 自定义 composable 入参遵循 MaybeRefOrGetter
import { toValue } from 'vue'
import type { MaybeRefOrGetter } from '@vueuse/core'

function useDouble(value: MaybeRefOrGetter<number>) {
  return computed(() => toValue(value) * 2)
}

自动导入配置速查 ​

VueUse 提供 @vueuse/core/resolver 供 unplugin-auto-import 自动按需导入,无需手写 import。

ts
// vite.config.ts
import AutoImport from 'unplugin-auto-import/vite'
import { VueUseComponentsResolver } from '@vueuse/core/resolver'
import Components from 'unplugin-vue-components/vite'

export default defineConfig({
  plugins: [
    // 自动导入 ref / computed / VueUse 函数
    AutoImport({
      imports: ['vue', '@vueuse/core'],
      dts: 'src/auto-imports.d.ts',
    }),
    // 自动注册 VueUse 的组件式 API(如 <UseDark>、<OnClickOutside>)
    Components({
      resolvers: [VueUseComponentsResolver()],
      dts: 'src/components.d.ts',
    }),
  ],
})
形态包 / 入口说明
函数式@vueuse/coreuseDark()、useMouse() 等 composable
组件式@vueuse/components<UseMouse>、<OnClickOutside> 等无渲染组件
指令式@vueuse/componentsv-on-click-outside、v-intersection-observer 等指令
  • AutoImport({ imports: ['@vueuse/core'] }) 即可在 .vue 中直接使用所有 core 函数
  • add-on 包(@vueuse/router 等)可追加到 imports 数组:{ '@vueuse/router': ['useRouteQuery'] }
  • 自动生成的 auto-imports.d.ts / components.d.ts 需加入 tsconfig.json 的 include,并提交或加入 .gitignore 视团队约定

相关链接 ​