JOJOUP
187.33MB · 2026-03-26
Pinia Colada 让 Vue 应用中的数据请求变得轻而易举。它构建于 Pinia 之上,彻底消除了数据请求带来的所有复杂度与样板代码。它具备完整的类型支持、可摇树优化,并且遵循与 Pinia 和 Vue 一致的设计理念:简单易上手、灵活可扩展、功能强大,还能实现渐进式接入。
安装
npm install pinia @pinia/colada
安装你所需功能对应的插件:
import { createPinia } from 'pinia'
import { PiniaColada } from '@pinia/colada'
app.use(createPinia())
// 需在 Pinia 之后安装
app.use(PiniaColada, {
// 可选配置项
})
Pinia Colada 的核心是 useQuery 和 useMutation 两个函数,分别用于数据查询和数据写入。以下是简单示例:
<script lang="ts" setup>
import { useRoute } from 'vue-router'
import { useMutation, useQuery, useQueryCache } from '@pinia/colada'
import { patchContact, getContactById } from '~/api/contacts'
const route = useRoute()
const queryCache = useQueryCache()
// 数据查询
const { data: contact, isPending } = useQuery({
// 缓存中该查询的唯一标识
key: () => ['contacts', route.params.id],
// 实际执行的查询逻辑
query: () => getContactById(route.params.id),
})
// 数据变更
const { mutate: updateContact, isLoading } = useMutation({
// 实际执行的变更逻辑
mutation: patchContact,
async onSettled({ id }) {
// 使上述查询失效,触发数据重新请求
await queryCache.invalidateQueries({ key: ['contacts', id], exact: true })
},
})
</script>
<template>
<section>
<p v-if="isPending">加载中...</p>
<ContactCard
v-else
:key="contact.id"
:contact="contact"
:is-updating="isLoading"
@update:contact="updateContact"
/>
</section>
</template>
想了解更多核心概念及使用方式,请查阅官方文档。 pinia-colada.esm.dev/