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>——可传普通值、refcomputed 或 getter 函数,内部用 toValue() 解包
  • 返回约定:返回单个状态用 ref;返回多状态用对象(可解构);带控制能力的返回 { ...state, pause, resume, ... } 或通过 controls: true 选项开启
  • 能力探测:浏览器 API 类函数返回 isSupportedComputedRef<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响应式 localStorageuseStorage 的预设)
useManualRefHistory手动调用 commit() 才记录的 ref 历史
useRefHistory跟踪 ref 变更历史,支持撤销 / 重做
useSessionStorage响应式 sessionStorageuseStorage 的预设)
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结合 injectcomputed
createReusableTemplate在同一组件内定义并复用模板片段
createTemplatePromise用模板渲染 Promise 式交互(如确认弹窗)
templateRef用字符串名绑定模板引用
tryOnBeforeMount安全调用 onBeforeMount(作用域外不报错)
tryOnBeforeUnmount安全调用 onBeforeUnmount
tryOnMounted安全调用 onMounted
tryOnScopeDispose安全调用 onScopeDispose
tryOnUnmounted安全调用 onUnmounted
unrefElement从 ref / 组件实例中取出真实 DOM 元素
useCurrentElement获取当前组件的根 DOM 元素
useMounted响应式判断组件是否已挂载
useTemplateRefsListv-for 中收集一组模板引用
useVirtualList长列表虚拟滚动
useVModel简化单个 v-model 双向绑定的封装
useVModels简化多个 v-model 双向绑定的封装

Watch(侦听,13)

函数说明
until等待状态满足条件的 Promise 化侦听
watchArray侦听数组的新增 / 删除元素
watchAtMost最多触发 N 次后停止的侦听
watchDebounced带防抖的 watch
watchDeep默认 deep: truewatch
watchIgnorable可临时忽略触发的 watch
watchImmediate默认 immediate: truewatch
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错误回调
shallowbooleanfalseshallowRef 代替 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 / yRef<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
  • targetwindow / document / ref / EventTarget,可省略
  • event:事件名或事件名数组
  • listener:回调或回调数组
  • optionsAddEventListenerOptionscapture / 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?) 复制文本;copiedcopiedDuring 内为 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?): 节流函数
  • msMaybeRefOrGetter<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.mdRef<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-滚动 / 停止回调

arrivedStatetop/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重新执行时先重置为初值
shallowbooleantrueshallowRef
throwErrorbooleanfalse失败时抛出而非吞掉
onError / onSuccessfunction-结果回调

useIntervalFn / useTimeoutFn

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

核心约定速查

MaybeRef 与 MaybeRefOrGetter

ts
type MaybeRef<T>          = T | Ref<T>
type MaybeRefOrGetter<T>  = T | Ref<T> | (() => T)   // VueUse 大多数入参类型
  • 调用方可传普通值、refcomputed、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 / useDateFormatcontrols 触发)支持 { 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 })

生命周期与作用域

  • 在组件 setupeffectScope 内调用 → 自动 onScopeDispose 清理副作用
  • 作用域外调用 → tryOnMounted / tryOnScopeDisposetryOnXxx 不会报错,静默跳过
  • 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/resolverunplugin-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-outsidev-intersection-observer 等指令
  • AutoImport({ imports: ['@vueuse/core'] }) 即可在 .vue 中直接使用所有 core 函数
  • add-on 包(@vueuse/router 等)可追加到 imports 数组:{ '@vueuse/router': ['useRouteQuery'] }
  • 自动生成的 auto-imports.d.ts / components.d.ts 需加入 tsconfig.jsoninclude,并提交或加入 .gitignore 视团队约定

相关链接