关于 vueuse
VueUse 技能参考,介绍 Vue Composition 工具集合,帮助 Vue 开发者查找常见应用模式的现成 composable,并说明 Nuxt 自动导入和 SSR 注意事项。
主要功能
- 01状态与存储 composable
- 02DOM、浏览器和传感器工具
- 03网络与动画工具
- 04数组、时间和响应式工具
- 05SSR 安全用法说明
适用场景
- 01为功能查找合适的 composable
- 02将响应式状态持久化到存储
- 03在 SSR 应用中处理浏览器 API
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ onmax/ nuxt-skills --skill vueuse安装后在 Claude Code 中输入/vueuse确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
composables/computed-async.mdcomputed-eager.mdcomputed-inject.mdcomputed-with-control.mdcreate-disposable-directive.mdcreate-event-hook.mdcreate-generic-projection.mdcreate-global-state.mdcreate-injection-state.mdcreate-projection.mdcreate-ref.mdcreate-reusable-template.mdcreate-shared-composable.mdcreate-template-promise.mdcreate-unref-fn.mdextend-ref.mdfrom.mdget.mdinject-local.mdis-defined.mdlogic-and.mdlogic-not.mdlogic-or.mdmake-destructurable.mdon-click-outside.mdon-element-removal.mdon-key-stroke.mdon-long-press.mdon-start-typing.mdprovide-local.md详细介绍
VueUse
Vue 组合式函数实用工具集。在编写自定义组合式函数之前,请先查看 VueUse——大多数常见模式都已实现。
**当前稳定版本:**适用于 Vue 3.5+ 的 VueUse 14.x
安装
Vue 3:
pnpm add @vueuse/core
Nuxt:
pnpm add @vueuse/nuxt @vueuse/core
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@vueuse/nuxt'],
})
Nuxt 模块会自动导入组合式函数,无需导入。
类别
| 类别 | 示例 |
|---|---|
| 状态 | useLocalStorage, useSessionStorage, useRefHistory |
| 元素 | useElementSize, useIntersectionObserver, useResizeObserver |
| 浏览器 | useClipboard, useFullscreen, useMediaQuery |
| 传感器 | useMouse, useKeyboard, useDeviceOrientation |
| 网络 | useFetch, useWebSocket, useEventSource |
| 动画 | useTransition, useInterval, useTimeout |
| 组件 | useVModel, useVirtualList, useTemplateRefsList |
| 侦听 | watchDebounced, watchThrottled, watchOnce |
| 响应性 | createSharedComposable, toRef, toReactive |
| 数组 | useArrayFilter, useArrayMap, useSorted |
| 时间 | useDateFormat, useNow, useTimeAgo |
| 实用工具 | useDebounce, useThrottle, useMemoize |
快速参考
根据需要加载组合式函数文件:
| 正在处理…… | 加载文件 |
|---|---|
| 查找组合式函数 | references/composables.md |
| 特定组合式函数 | composables/<name>.md |
加载文件
请根据任务考虑加载以下参考文件:
- references/composables.md - 按类别或功能查找 VueUse 组合式函数时使用
**请勿一次性加载所有文件。**仅加载与当前任务相关的文件。
常见模式
状态持久化:
const state = useLocalStorage('my-key', { count: 0 })
鼠标跟踪:
const { x, y } = useMouse()
防抖 ref:
const search = ref('')
const debouncedSearch = refDebounced(search, 300)
共享组合式函数(单例):
const useSharedMouse = createSharedComposable(useMouse)
SSR 注意事项
许多 VueUse 组合式函数使用了 SSR 期间不可用的浏览器 API。
使用 isClient 检查:
import { isClient } from '@vueuse/core'
if (isClient) {
// Browser-only code
const { width } = useWindowSize()
}
在 onMounted 中包装:
const width = ref(0)
onMounted(() => {
// Only runs in browser
const { width: w } = useWindowSize()
width.value = w.value
})
使用兼容 SSR 的组合式函数:
// These check isClient internally
const mouse = useMouse() // Returns {x: 0, y: 0} on server
const storage = useLocalStorage('key', 'default') // Uses default on server
@vueuse/nuxt 会自动处理 SSR - 组合式函数在服务器上会返回安全的默认值。
目标元素引用
将组件引用作为目标而非 DOM 元素时:
import type { MaybeElementRef } from '@vueuse/core'
// Component ref needs .$el to get DOM element
const compRef = ref<ComponentInstance>()
const { width } = useElementSize(compRef) // ❌ Won't work
// Use MaybeElementRef pattern
import { unrefElement } from '@vueuse/core'
const el = computed(() => unrefElement(compRef)) // Gets .$el
const { width } = useElementSize(el) // ✅ Works
或者直接访问 $el:
const compRef = ref<ComponentInstance>()
onMounted(() => {
const el = compRef.value?.$el as HTMLElement
const { width } = useElementSize(el)
})
评论
支持 Markdown