关于 create-adaptable-composable
面向 Vue.js 开发者的技能,介绍如何设计可接受响应式与普通输入的 composable。内容涵盖类型选择及使用 Vue 响应式 API 规范化输入,并说明可写值和函数参数的处理方式。
主要功能
- 01设计可复用 composable API
- 02选择 MaybeRef 与 MaybeRefOrGetter
- 03使用 toRef 或 toValue 规范化输入
- 04处理可写与只读输入
适用场景
- 01构建兼容 ref 和普通值的 composable
- 02支持计算或派生输入
- 03创建双向可写 composable
- 04避免意外调用函数参数
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ vuejs-ai/ skills --skill create-adaptable-composable安装后在 Claude Code 中输入/create-adaptable-composable确认已加载。
详细介绍
创建适配性组合式函数
适配性组合式函数是可重复使用的函数,可以接受响应式和非响应式输入。这样,开发者就能在各种场景中使用组合式函数,而不必担心输入是否具有响应性。
在 Vue.js 中设计适配性组合式函数的步骤:
- 确认组合式函数的用途、API 设计以及预期的输入和输出。
- 确定哪些输入参数应当具有响应性(MaybeRef / MaybeRefOrGetter)。
- 使用
toValue()或toRef()在响应式副作用中规范化输入。 - 使用 Vue 的响应式 API 实现组合式函数的核心逻辑。
核心类型概念
类型工具
/**
* value or writable ref (value/ref/shallowRef/writable computed)
*/
export type MaybeRef<T = any> = T | Ref<T> | ShallowRef<T> | WritableComputedRef<T>;
/**
* MaybeRef<T> + ComputedRef<T> + () => T
*/
export type MaybeRefOrGetter<T = any> = MaybeRef<T> | ComputedRef<T> | (() => T);
策略与规则
- 只读、适用于计算属性的输入:使用
MaybeRefOrGetter - 需要可写 / 双向输入:使用
MaybeRef - 参数可能是函数值(回调 / 谓词 / 比较器):不要使用
MaybeRefOrGetter,否则可能会意外地将其作为 getter 调用。 - DOM / 元素目标:如果需要计算或派生目标,请使用
MaybeRefOrGetter。
使用 MaybeRefOrGetter 或 MaybeRef 时:
- 使用
toRef()解析响应式值(例如 watcher 源) - 使用
toValue()解析非响应式值
示例
适配性 useDocumentTitle 组合式函数:只读标题参数
import { watch, toRef } from 'vue'
import type { MaybeRefOrGetter } from 'vue'
export function useDocumentTitle(title: MaybeRefOrGetter<string>) {
watch(toRef(title), (t) => {
document.title = t
}, { immediate: true })
}
适配性 useCounter 组合式函数:双向可写计数参数
import { watch, toRef } from 'vue'
import type { MaybeRef } from 'vue'
function useCounter(count: MaybeRef<number>) {
const countRef = toRef(count)
function add() {
countRef.value++
}
return { add }
}
评论
支持 Markdown