SuperAPI AI 工具集

vueuse-core-skilld

编程与开发

查看项目

更新于 10-15 18:11

技能介绍

用途

VueUse Core(@vueuse/core)是面向 Vue 3 的组合式工具函数集合,本技能包针对其 15.0.0 版本,用于在编写导入 "@vueuse/core" 或 "@vueuse/shared" 的代码时,提供与 v15 一致的 API 用法与迁移参考。

环境要求与包结构

  • 自 v13 起为 ESM-only(package.json 中 type 为 module),require() 会失败。
  • 需要 Vue ^3.5.0(package.json 第 42 行)。
  • 需要 Node.js >= 22(package.json 第 39 行);v15.0.0 起不再支持 Node 20。
  • 导出入口为 . 与 ./metadata(package.json 第 24-28 行),全部内容来自 dist/。
  • @vueuse/shared@15.0.0 作为依赖被完整再导出(dist/index.d.ts 第 3 行),因此可以直接从 '@vueuse/core' 导入 useToggle 等。

v15 影响生成代码的规则

  • 不再提供 templateRef(v15.0.0 移除),应改用 Vue 内置的 useTemplateRef()。
  • 计时器选项被移除,改用 scheduler。v15.0.0 从可配置调度器的组合函数中移除了已弃用的 interval / immediate 选项(相关选项接口继承或交叉 ConfigurableScheduler,见 dist/index.d.ts 第 212-217 行),影响 useCountdown、useNow、useTimestamp、useTimeAgo、useTimeAgoIntl、useTemporalNow、useElementByPoint、useMemory、useVibrate 以及 useWebSocket 的 heartbeat 选项。scheduler 类型为 (cb: Fn) => Pausable,因此 useRafFn 可直接接入。
  • useThrottleFn 现在默认触发尾调用(trailing 默认值由 false 改为 true)。若需保持 v14 行为,可将第 3 个参数 trailing 设为 false。
  • useEventSource 会处理 SSE 消息事件,同时触发 onmessage 和 addEventListener 处理器;不要为未命名事件手动添加重复监听。
  • deepRefs 默认值将在下个大版本翻转:当前默认为 true,并带有明确警告,说明下一个主版本会改为 false(dist/index.d.ts 第 204-211 行)。在取值有影响处应显式传入 deepRefs。

已弃用或应替换的导出

  • computedEager 应由 computed() 替代(Vue 3.4+ 在值未变化时不再重新触发);文档标注“未来版本将移除”。
  • watchPausable 应由 Vue 3.5 原生 watch() 替代,其返回 { stop, pause, resume }。
  • executeTransition 应替换为 transition(source, from, to, options);在 dist/index.d.ts 第 5114-5121 行标记为弃用。
  • UseTransitionOptions.transition 应替换为 easing 选项;同一弃用块。
  • breakpointsVuetify 应替换为 breakpointsVuetifyV2 或 breakpointsVuetifyV3;在 dist/index.d.ts 第 758-762 行标记为弃用。
  • asyncComputed 是 computedAsync 的别名(仍保留,见 dist/index.d.ts 第 46 行)。

常见任务示例

import { useLocalStorage, useDark, useTitle, useThrottleFn } from '@vueuse/core'

// 响应式 getter 参数可在不使用 computed() 的情况下派生值 const isDark = useDark() const title = useTitle(() => isDark.value ? 'Night' : 'Day')

// 带 schema 演进的存储:mergeDefaults 会填充新增键 const settings = useLocalStorage('settings', { theme: 'light', density: 'comfortable' }, { mergeDefaults: true })

// v15 节流默认触发尾调用;第 3 个参数为 trailing const onResize = useThrottleFn(handler, 200, false, true) // trailing=false, leading=true

import { useWebMCP } from '@vueuse/core'

// 为浏览器智能体注册 WebMCP 工具(v15 新增) const { isSupported, isRegistered, error } = useWebMCP({ name: 'get-current-user', description: 'Returns the signed-in user id', inputSchema: { type: 'object' }, execute: () => ({ userId: user.value?.id ?? null }), })

参考内容

  • API 面:完整的 v15 导出清单,按组分类。
  • 共享 API:core 再导出的 @vueuse/shared 函数。
  • v14 到 v15 迁移:自 v14.3.0 以来所有破坏性变更、新功能与值得注意的修复,并附引用。
  • v15 新增函数:useWebMCP、useTemporalNow、useLiveAnnouncer、useElementOverflow 的用法。
  • 最佳实践:getter、事件过滤器、存储序列化器、调度器、SSR、作用域。

调试说明(v15 可能解释行为变化的修复)

  • useFetch 在新的请求开始后忽略过期的成功响应,并在重新请求成功后忽略过期的中止错误。
  • useWebSocket 忽略来自被取代 socket 的消息,并在显式 close() 后把状态同步为 CLOSED。
  • useResizeObserver 用 instanceof Element 守卫 observe(),Vue 注释节点不再导致崩溃。
  • 指针处理:useDraggable 与 usePointerSwipe 在 pointercancel 时结束,usePointer 重置 isInside,onLongPress 清除待处理按压。