pinia实现持久化
前言
pinia是什么?pinia有什么好处?
pinia是设计一个拥有组合式 API 的 Vue 状态管理库, Vue 的专属状态管理库,它允许你跨组件或页面共享状态
pinia可以实现以下功能:
- Devtools 支持
- 追踪 actions、mutations 的时间线
- 在组件中展示它们所用到的 Store
- 让调试更容易的 Time travel
- 热更新
- 不必重载页面即可修改 Store
- 开发时可保持当前的 State
- 插件:可通过插件扩展 Pinia 功能
- 为 JS 开发者提供适当的 TypeScript 支持以及自动补全功能。
- 支持服务端渲染
简单概括就是,以后在使用pinia中state
是 store 的数据 (data
),getters
是 store 的计算属性 (computed
),而 actions
则是方法 (methods
)
pinia 安装
pinia可以通过两种方式来创建,
方法1:可以在创建vue框架时勾选pinia选项
方法2:在已经构建好的vue项目,可以使用以下命令来构建pinia
1 2 3 4 5
| yarn add pinia
npm install pinia
pnpm add pinia
|
tips
:如果你使用的vue版本低于2.7,还需要安装组合式api包:
1 2 3 4 5
| yarn add @vue/composition-api
npm install @vue/composition-api
pnpm add @vue/composition-api
|
安装持久化插件:
1
| npm i pinia-plugin-persistedstate
|
pinia使用并实现持久化
这里推荐把pinia独立出,在store
文件夹下新建index.js
文件,在文件中添加以下代码:
1 2 3 4 5 6 7 8 9 10
| import { createPinia } from 'pinia'
import persist from 'pinia-plugin-persistedstate' const pinia = createPinia()
pinia.use(persist)
export default pinia
|
在main.js
中挂载:
1 2 3 4 5
| import { createApp } from 'vue' import pinia from '@/stores/index' import App from './App.vue' const app = createApp(App) app.use(pinia)
|
这样就为vue构建好了一个pinia组件,那如何使用它呢?
在stores
文件夹下新建modules
文件夹,用来存放使用pinia的模块,比如user.js
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| import { defineStore } from 'pinia' import { ref } from 'vue' import { getUser } from '@/api/user.js'
export const useUserStore = defineStore( 'big-user', () => { const token = ref('') const setToken = (newToken) => { token.value = newToken } const removeToken = () => { token.value = '' }
const user = ref({}) const getUserInfo = async () => { const res = await getUser() user.value = res.data.data } const setUser = (obj) => { user.value = obj } return { token, setToken, removeToken, user, getUserInfo, setUser } }, { persist: true } )
|
在user.js
添加完自己需要的代码之后,需要在stores/index.js
暴露出去供组件使用:
1 2 3 4 5 6 7 8 9 10 11 12
| import { createPinia } from 'pinia' import persist from 'pinia-plugin-persistedstate'
const pinia = createPinia() pinia.use(persist)
export default pinia
export * from './modules/user'
|
在vue组件中,可以这样使用这些方法或者参数:
1 2 3 4 5 6 7 8 9
| <script> // 导入pinia import { useUserStore } from '@/stores' // 使用useUserStore(你user.js定义的名称) const useStore = useUserStore() // 这样你就可以通过useStore.xxx来访问user里面的方法或者参数了 // 如访问上面的token const token = useStore.token.value </script>
|