# @fesjs/plugin-pinia ## 介绍 集成 [pinia](https://pinia.vuejs.org/) ,提供状态管理的能力,封装一些胶水代码,可以直接定义store 使用。 为了防止 `Fes.js` 与 `pinia` 提供的 API 冲突,`Fes.js`不提供任何 `pinia` 的API,相关API直接从 `pinia` 导出: ```js import { defineStore } from 'pinia'; ``` 约定 `plugin` 定义放在 `stores` 目录下,文件名包含plugin被解析为插件,无需额外配置,定义即可用。 ``` └── src ├── pages │ └── index.vue └── stores │ ├── plugin-logger.js │ ├── user.js └── app.js ``` ## 启用方式 在 `package.json` 中引入依赖: ```json { "dependencies": { "@fesjs/fes": "^2.0.0", "@fesjs/plugin-pinia": "^2.0.0", "pinia": "^2.0.11" } } ``` ## API ### pinia `createPinia`执行后创建的实例。 ```js import { pinia } from '@fesjs/fes' ``` ## 使用 ### 定义 store 我们在 `src/store/main.js`中: ```js import { defineStore } from 'pinia' // useStore could be anything like useUser, useCart // the first argument is a unique id of the store across your application export const useStore = defineStore('main', { // other options... }) ``` ### setup ```js import { useStore } from '@/store/main' export default { setup(){ const store = useStore() } } ``` ### 非setup 比如在app.js中: ```js import { pinia } from '@fesjs/fes' export const beforeRender = { loading: , action() { const { setRole } = accessApi; return new Promise((resolve) => { setTimeout(() => { const store = useStore(pinia); store.$patch({ userName: '李雷', role: 'admin' }); setRole('admin'); }, 1000); }); } }; ```