Skip to content

Plugin(插件系统)

介绍

使用pinia.use() 方法为pinia添加一个插件

插件接收一个函数,传参如下

typescript
export function myPiniaPlugin(context) {
  context.pinia // 用 `createPinia()` 创建的 pinia。
  context.app // 用 `createApp()` 创建的当前应用(仅 Vue 3)。
  context.store // 该插件想扩展的 store
  context.options // 定义传给 `defineStore()` 的 store 的可选对象。
  // ...
}

TIP

插件支持链式注册,即

typescript
pinia.use(plugin1).use(plugin2)

mini-pinia 中仅做部分实现

实现

实例中提供一个数组用于存储插件 并在合适的时机调用

typescript
const _p = []

use(plugin) {
  _p.push(plugin)
  return pinia // 重新返回pinia实例以支持链式调用
},

在创建 store 时调用插件

typescript
pinia._p.forEach((plugin) => {
  plugin({ store, id }) // 执行插件
})