mcpField
V
vueuse-integrations-skilld

vueuse-integrations-skilld

github.com/skilld-dev开发184145 次安装3 周前更新
代码仓库

关于 vueuse-integrations-skilld

这是 VueUse 的扩展,为 12 个实用库提供 Vue 响应式封装,适合希望通过组合式函数使用这些库的 Vue 开发者。功能涵盖 HTTP 请求、验证、存储、搜索和界面交互。

主要功能

  1. 01封装 12 个实用库的响应式接口
  2. 02处理 Axios 请求与异步验证
  3. 03响应式 IndexedDB 键值存储
  4. 04Fuse.js 搜索与 JWT 解码
  5. 05焦点陷阱、排序、二维码和进度

适用场景

  1. 01在 Vue 组件中管理 HTTP 请求
  2. 02验证响应式表单数据
  3. 03使用 IndexedDB 持久化键值数据
  4. 04添加搜索、焦点陷阱或可排序列表

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/skilld-dev/vue-ecosystem-skills --skill vueuse-integrations-skilld

安装后在 Claude Code 中输入/vueuse-integrations-skilld确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api.md
migration-v14-to-v15.md
usage-patterns.md

详细介绍

@vueuse/integrations 15.0.0

VueUse 的附加包:为 12 个工具库提供响应式封装。需要 Vue(^3.5.0),并将 @vueuse/core 和 @vueuse/shared 15.0.0 作为依赖项提供(package.json:55-70,108-111)。从 v13 起仅支持 ESM。从 v15 起需要 Node >= 22(package.json:52-54)。

参考资料

安装

npm i @vueuse/integrations

每个封装都需要单独安装对应的可选 peer 依赖,否则导入时会在运行时失败:

组合式函数Peer 依赖
useAsyncValidatorasync-validator@^4
useAxiosaxios@^1
useChangeCasechange-case@^5
useCookies`universal-cookie@^7
useDrauu`drauu@^1
useFocusTrap`focus-trap@^7
useFusefuse.js@^7
useIDBKeyvalidb-keyval@^6
useJwtjwt-decode@^4
useNProgressnprogress@^0.2
useQRCodeqrcode@^1.5
useSortablesortablejs@^1

来源:package.json:55-69。

导入规则:使用子模块

为实现摇树优化,请从各函数的子模块导入(README.md:33-42):

// Preferred
import { useAxios } from '@vueuse/integrations/useAxios'

// Avoid
import { useAxios } from '@vueuse/integrations'

组件从 /component 子路径导入:

import { UseFocusTrap } from '@vueuse/integrations/useFocusTrap/component'
import { UseSortable } from '@vueuse/integrations/useSortable/component'
import { UseAsyncValidator } from '@vueuse/integrations/useAsyncValidator/component'

别名导出已在 v14.0.0 中弃用;请使用原始名称(https://github.com/vueuse/vueuse/issues/5009)。

v15 的破坏性变更(相较于 v14)

  1. useIDBKeyval 返回对象 { data, isFinished, isSupported, set },而不是 ref(dist/useIDBKeyval.d.ts:46-51)。const count = useIDBKeyval('k', 0) 将无法再编译;请改为解构 data。
  2. useIDBKeyval 默认通过 BroadcastChannel 在多个标签页间同步;设置 listenToStorageChanges: false 可禁用(dist/useIDBKeyval.js:60-76, https://github.com/vueuse/vueuse/pull/5338)。
  3. 不再支持 Node.js 20;需要 Node >= 22(https://github.com/vueuse/vueuse/releases/tag/v15.0.0)。
  4. drauu 的 peer 依赖范围扩大为 ^1 || ^0.4(https://github.com/vueuse/vueuse/pull/5595)。

详情和迁移代码:参见迁移参考。

快速示例

useAxios
import { useAxios } from '@vueuse/integrations/useAxios'

// Awaits the whole result; rejects on error
const { data, error } = await useAxios('/api/posts')

// Manual trigger without firing immediately
const { execute } = useAxios('/api/posts', { method: 'GET' }, { immediate: false })

// Typed data via initialData (data becomes Ref<T> instead of Ref<T | undefined>)
const { data } = useAxios<User[]>('/api/users', undefined, { initialData: [] })

execute() 接受 url、config 或两者。默认选项:immediate(仅当传入 url 字符串时为 true)、shallow: true、abortPrevious: true、resetOnExecute: false(dist/useAxios.js:13-17,35)。

useIDBKeyval
import { useIDBKeyval } from '@vueuse/integrations/useIDBKeyval'

const { data: count, set } = useIDBKeyval('my-count', 0)
count.value++          // watched, persisted automatically
await set(10)          // explicit write, resolves after the IDB transaction
count.value = null     // deletes the key
useSortable
import { useSortable } from '@vueuse/integrations/useSortable'

const list = ref(['a', 'b', 'c'])
const { start, stop, option } = useSortable(el, list, {
  watchElement: true, // reinitialize when el appears/disappears (v-if)
})

默认的 onUpdate 处理器会自动移动数组元素(dist/useSortable.js:14-16)。传入自定义 onUpdate 可覆盖默认行为;如需手动移动,请使用 moveArrayElement(list, from, to, e)。

useFocusTrap
import { useFocusTrap } from '@vueuse/integrations/useFocusTrap'

const target = useTemplateRef<HTMLElement>('modal')
const { activate, deactivate, hasFocus } = useFocusTrap(target, { immediate: true })

async function open() {
  show.value = true
  await nextTick() // wait for v-if to render the element
  activate()
}

容器元素的变化会自动跟踪;返回对象为 { hasFocus, isPaused, activate, deactivate, pause, unpause },不包含 updateContainerElements(dist/useFocusTrap.js:37-66)。

useCookies
import { useCookies } from '@vueuse/integrations/useCookies'

const { get, set, remove } = useCookies(['token'], { autoUpdateDependencies: true })

对于 SSR,请使用 createCookies(req) 从请求创建组合式函数(dist/useCookies.d.ts:4-9)。在 Nuxt 中,请显式导入以避免与 Nuxt 的 useCookie 冲突。

useFuse
import { useFuse } from '@vueuse/integrations/useFuse'

const search = ref('')
const { results } = useFuse(search, data, {
  fuseOptions: { keys: ['title'] },
  resultLimit: 10,
  matchAllWhenSearchEmpty: true,
})
其他封装
useChangeCase('hello world', 'camelCase')   // writable computed; type must match a change-case *Case export
useDrauu(svgEl, { brush: { color: 'red' } }) // target must be an <svg> element
useJwt(token)                                // { header, payload } with fallbackValue on decode error
useNProgress()                               // { isLoading, progress, start, done, remove }
useQRCode('https://vueuse.org')              // ShallowRef<string> of a data URL
useAsyncValidator(form, rules, { manual: true }) // thenable; { pass, errors, execute }

使用 useDrauu、useNProgress、useQRCode 或 useAsyncValidator 编写较复杂代码前,请参阅用法模式。

环境限制

  • Vue ^3.5.0 peer 依赖(package.json:68)。
  • 仅支持 ESM;从 v13.0.0 起不再提供 CommonJS 构建(https://github.com/vueuse/vueuse/releases/tag/v13.0.0)。
  • Node >= 22(package.json:53)。
  • useQRCode 仅在浏览器中渲染(isClient 守卫,dist/useQRCode.js:16)。
  • useIDBKeyval 的标签页同步需要 BroadcastChannel;isSupported 会报告其支持情况(dist/useIDBKeyval.js:18)。

评论

支持 Markdown