另一个适配 vue-mini 的 Pinia(精简版)。
Important
项目当前处于 Beta 阶段
npm i pinia-vue-miniyarn add pinia-vue-minipnpm i pinia-vue-mini// app.ts
import { createApp } from 'vue-mini'
import { createPinia } from 'pinia-vue-mini'
createApp(() => {
createPinia()
});Warning
pinia-vue-mini 仅支持 setupStore
// counter.ts
import { defineStore } from 'pinia-vue-mini'
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
const double = computed(() => count.value * 2)
function increment() {
count.value++
}
return {
count,
double,
increment
}
})使用方式与 Pinia 基本一致
// page.ts
import { definePage } from 'vue-mini/core'
import { useCounterStore } from './store'
definePage(() => {
const counter = useCounterStore()
return {
count: counter.count,
double: counter.double,
increment: counter.increment
}
})Warning
和 Pinia 一样,直接解构 store 会丢失响应式,如需要响应式,请使用 storeToRefs 或 使用 .[prop name] 的形式单独赋值返回
以下用法会导致响应式丢失
// page.ts
import { definePage } from 'vue-mini/core'
import { useCounterStore } from './store'
definePage(() => {
const counter = useCounterStore()
return {
...counter
}
})storeToRefs
为了 store 可以解构使用,pinia-vue-mini 和 Pinia 一样,提供了 storeToRefs 方法,该方法会返回一个引用对象,包含 store 的所有 state、 getter。类似于 toRefs(),所以 method 和非响应式属性会被完全忽略。
// page.ts
import { definePage } from 'vue-mini/core'
import { useCounterStore } from './store'
definePage(() => {
const counter = useCounterStore()
const { count, double } = storeToRefs(counter)
return {
count,
double,
}
})pinia-vue-mini 支持数据持久化,只需在 defineStore 使用 persist 配置即可。
import { defineStore } from 'pinia-vue-mini'
export const useCounterStore = defineStore('counter', () => {
const count = ref(0)
return { count }
}, {
persist: true
})Warning
目前只支持 ref 和 reactive 类型的数据持久化,暂不支持其他类型。