用途:@pinia/colada(1.4.5)是构建在 Pinia 之上的 Vue 数据获取层。查询(useQuery)负责读取与缓存数据,变更(useMutation)负责写入数据,二者都存放在 Pinia store 中(useQueryCache、useMutationCache)。适用场景是编写、调试或审查任何导入 @pinia/colada 的代码。
安装与接入:npm install pinia @pinia/colada。创建 createPinia() 后先 app.use(createPinia()),再 app.use(PiniaColada, { queryOptions: { staleTime: 60000 }, plugins: [] });官方注明须在 pinia 之后安装,且选项对象对正确类型推断是必要的。全局选项放在 queryOptions / mutationOptions 下。
核心模型:查询由 key 标识,key 是可 JSON 序列化的数组,且具有层级匹配性。status 表示数据状态(pending/success/error),asyncStatus 表示操作状态(idle/loading),二者刻意分离。默认值为 staleTime 5000、gcTime 300000、refetchOnMount、refetchOnWindowFocus、refetchOnReconnect、enabled: true;变更的 gcTime 默认为 60000。
主要能力:useQuery 支持响应式 key(传 getter 才能在依赖变化时重新获取)、用 enabled 守卫查询、用 defineQueryOptions 定义类型安全的共享选项、用 defineQuery 共享查询状态(setup 函数必须同步)。useQuery 接收选项或返回选项的 getter。变更方面,mutate 不会 reject,适合模板与事件处理器;mutateAsync 返回 promise 且失败时 reject;onMutate 需放在 mutation 之前以正确推断 context。查询刻意不提供 onSuccess/onError,因为一个查询可能有多个观察者,可用 watch(data, ...) 或 PiniaColadaQueryHooksPlugin 全局钩子。
版本与限制:1.0.0 移除了 useQuery(setup, paramsGetter) 与 useQueryState(setup, paramsGetter) 形式,可用随包附带的 codemod:ast-grep scan -r node_modules/@pinia/colada/codemods/rules/migration-0-21-to-1-0.yaml -i src。useQueryState(key) 只读状态不发起请求,key 是唯一参数。initialData 会将状态变为 success,placeholderData 不改变缓存;手动重置条目状态用 queryCache.setEntryState(entry, state)。无限查询数据为 { pages, pageParams },需用 setInfiniteQueryData()(1.2.0 加入)预填,而非 setQueryData()。开发工具为独立包 @pinia/colada-devtools;Nuxt 需安装 @pinia/colada-nuxt 模块以自动处理 SSR 序列化。对等依赖为 vue ^3.5.41,pinia ^2.2.6 || ^3.0.0 || ^4.0.2(自 1.4.1 起允许 pinia 4)。