前端VueVue 状态管理
nodaoli概念
我的理解就是,在整个前端Vue项目中,有需要全局都使用到的对象,例如token
,而状态管理就是跨文件、跨域的一个全局变量对象
Vue 使用 Pinia
1 2 3 4 5 6 7 8 9
| import { createApp } from 'vue' import { createPinia } from 'pinia' import App from './App.vue'
const pinia = createPinia() const app = createApp(App)
app.use(pinia) app.mount('#app')
|
例子
创建 store
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
| import { defineStore } from 'pinia';
import { ref } from 'vue';
export const useTokenStore = defineStore('token', () => { const token = ref('');
const setToken = (newToken) => { token.value = newToken; }
const removeToken = () => { token.value = ''; }
return { token, setToken, removeToken }; });
|
使用 store
1 2 3 4 5 6 7 8 9
| import { useTokenStore } from '@/stores/token.js';
const tokenStore = useTokenStore();
|
在pinia
中定义的响应式数据,都不需要.value
pinia-persistedstate-plugin 参数持久化插件
pinia
是在内存中的,一刷新就没有了,所以需要持久化插件,将数据保存到本地中
使用pinia-persistedstate-plugin
插件
1
| npm install pinia-persistedstate-plugin
|
1 2 3 4 5 6 7
| import { createPinia } from 'pinia'; import { createPersistedState } from 'pinia-persistedstate-plugin';
const pinia = createPinia(); const persist = createPersistedState()
pinia.use(persist)
|
并在defineStore
中添加persist
参数
1 2 3 4 5 6 7 8 9 10 11
| export const useTokenStore = defineStore('token', () => { const token = ref('');
const setToken = (newToken) => {token.value = newToken;}
const removeToken = () => {token.value = '';}
return { token, setToken, removeToken }; }, { persist: true });
|