Pinia 搭配这个插件!简直无敌!

B站影视 港台电影 2025-09-15 13:02 1

摘要:无缝衔接 Pinia数据直接进 Store,调试时仍在 DevTools 的“Pinia”面板里,心智零切换。不写样板代码loading / error / data 全返回,模板只关心“渲染”即可。缓存即状态组件销毁、路由跳转、甚至 SSR,都能复用同一份缓

如果你已经把 Vue 状态管理交给 Pinia,却还在手写 loading / error / retry / 缓存失效 那一套“样板代码”!

那么今天的主角——Pinia Colada——会让你忍不住喊一句: “哎呀,怎么不早点出现!”

// stores/user.tsexport const useUserStore = defineStore('user', => { const profile = ref(null) async function fetchUser(id: number) { profile.value = await axios.get(`/api/user/${id}`) } return { profile, fetchUser }})

组件里随用随取:

{{ user.profile.name }}

一切都很美好,直到你开始想:

能不能别每次都重新请求?加载态、错误态、轮询、乐观更新、后台刷新……我不想再写一遍!组件卸载后再回来,数据还能保持新鲜吗?

一句话:“专为 Vue + Pinia 设计的智能数据获取层”

它通过提供 useQuery、useMutation 等组合式函数,把异步数据流变成状态流,并自动帮你做:

请求去重 & 内存缓存后台刷新失效重试乐观更新回滚Pinia Store 深度集成(数据即状态,状态即数据)

零依赖(除 Pinia 外)≈ 2 kB,Tree-Shaking 友好,TypeScript 100%。

无缝衔接 Pinia
数据直接进 Store,调试时仍在 DevTools 的“Pinia”面板里,心智零切换。不写样板代码
loading / error / data 全返回,模板只关心“渲染”即可。缓存即状态
组件销毁、路由跳转、甚至 SSR,都能复用同一份缓存。乐观更新
useMutation 内置 onMutate / onError / onSettled,回滚一行代码。插件化 & 可组合
自定义插件、组合函数,逻辑随处复用,与 Vue 生态完全同构。体积够小
2 kB,只拉取用到的函数,再不用担心“为了缓存而引入半个世界”。5 分钟快速上手

1. 安装

npm i pinia @pinia/colada

2. 注册插件

// main.tsimport { createApp } from 'vue'import { createPinia } from 'pinia'import { PiniaColada } from '@pinia/colada'const pinia = createPiniapinia.use(PiniaColada)createApp(App).use(pinia).mount('#app')

3. 组件里直接查询

Loading…Oops: {{ error.message }}{{ t.title }}

4. 提交变更(乐观更新)

const { mutate, isPending } = useMutation({ mutation: (newTodo: string) => axios.post('/api/todos', { title: newTodo }), onMutate: async (newTodo) => { // 立即写到缓存,UI 秒变 const prev = queryClient.getQueryData(['todos']) queryClient.setQueryData(['todos'], old => [...old, { id: Date.now, title: newTodo }]) return { prev } // 回滚快照 }, onError: (err, _, context) => queryClient.setQueryData(['todos'], context.prev),})

1. useQuery

作用:取数据
典型用法:列表、详情、搜索

2. useMutation

作用:改数据
典型用法:新增、编辑、删除

3. defineQuery/ defineMutation

作用:在 Store 里复用
典型用法:跨组件共享同一查询

4. queryCache.invalidateQueries

作用:手动失效
典型用法:增删改后刷新列表

维度TanStack Query (Vue)Pinia Colada生态理念框架无关,通用缓存层专为 Vue + Pinia 而生状态归属独立于 Store,另起炉灶查询结果 = Pinia State,DevTools 一站式查看学习曲线需理解 queryClient / QueryCache 新概念沿用 ref / computed / watch 即可插件扩展提供 queryClient 级插件直接写 Pinia 插件,与现有 Store 逻辑无缝组合体积~ 13 kB(核心)~ 2 kB(核心)SSR支持支持,且自动复用 Pinia 的 SSR 注入

结论:

还等啥?

npm i @pinia/colada 一下,
把 loading = true / false 和 try…catch 统统删掉,
感受“状态即缓存,缓存即状态”的丝滑吧!

来源:不秃头程序员

相关推荐