插件系统
Pinia 插件是 (context) => { … },在 store 创建后运行,可扩展 $subscribe、$onAction、挂载 $router 等。与 Vue app.use 的 Pinia 实例级插件不同(pinia.use(plugin))。
1. 插件能做什么
| 能力 | 示例 |
|---|---|
包装 $patch | 持久化、日志 |
| 监听 action | 埋点、错误上报 |
添加 $xxx 方法 | 通用工具 |
| 多次 store 共享逻辑 | persistedstate 官方插件 |
2. 执行时机
Store 首次被使用该 id 创建时 依次应用已注册插件;之后同 id 复用实例不再重复安装插件逻辑。
3. 类型扩展
通过 PiniaCustomProperties / DefineStoreOptions augmentation 让 store.$persist 等有类型。
4. 与中间件对比
| Redux middleware | Pinia plugin |
|---|---|
| 改 dispatch 链 | 改 store 实例 |
| 洋葱 | 平面钩子 |
5. 最佳实践
- 持久化用官方 pinia-plugin-persistedstate 或自研
$subscribe。 - 避免插件里隐式改 state 无日志。
- Nuxt 用模块自动
pinia.use(见 06)。
6. 总结
插件 = store 级别的横切;核心 state 仍由 defineStore 与 Vue 响应式驱动。