Nuxt引入vue-persistedstate以及踩坑記錄
前言
項(xiàng)目需求,需要vuex進(jìn)行路由持久化保存,結(jié)合nuxt框架進(jìn)行記錄。
思路
監(jiān)聽數(shù)據(jù)變化, 每當(dāng)?shù)卿浲戤?
vuex 數(shù)據(jù)發(fā)生變化,就要將數(shù)據(jù)保存到瀏覽器 本地 (指用戶瀏覽器localStorage)
頁面打開時(shí), 會嘗試將之前保存過的數(shù)據(jù)恢復(fù)到 vuex 當(dāng)中即可
有點(diǎn)復(fù)雜, 找個插件幫忙
實(shí)現(xiàn)緩存信息到本地
nuxtjs
中store
不能直接使用瀏覽器的lcoalStorage
方法,
而且自己寫數(shù)據(jù)同步功能比較麻煩,
所以我們需要依賴一個插件vuex-persistedstate
,該插件會把本地存儲的數(shù)據(jù)存儲到store
。
引入方法
1.安裝
npm install vuex-persistedstate --save
nuxt.config.js配置文件
plugins: [ '@/plugins/element-ui', // '@/plugins/localStorage' // 這里的引入, 如果是普通字符串, 就在服務(wù)端馬上運(yùn)行 // 如果是要等到瀏覽器再運(yùn)行的代碼可以將配置改為對象, 并且 路徑作為 src 傳進(jìn)去 { src: '@/plugins/localStorage', // 如果只在瀏覽器加載的代碼, 可以添加一個 屬性 ssr: false ssr: false } ],
plugins/localStorage.js
console.log('測試自定義插件') // 在這個自定義插件中配置 vuex-persistedstate import createPersistedState from 'vuex-persistedstate' // 這里什么都可以寫, 不過如果你需要用到 nuxt 本身, 必須通過 export 的方式暴露函數(shù)來接收 export default ({store}) => { // 如果想要等到 nuxt 加載完畢 // 再執(zhí)行代碼, 有一個函數(shù)叫做 window.onNuxtReady() window.onNuxtReady(()=>{ createPersistedState({ // 在這里其實(shí), 是想要將 vuex 數(shù)據(jù)存放到 localStorage 里面 key: 'store' })(store) }) }
2.使用
store/index.js
// 用戶管理 export const state = () => ({ //采用接口返回的數(shù)據(jù)結(jié)構(gòu) userInfo: { // token: '', // user: {} } }) // 測試 // export const state = () => { // return { // // 這里是全局狀態(tài)數(shù)據(jù)保存的地方 // abc: 123 // } // } // 修改 state 里面的數(shù)據(jù), 必須使用 mutations 里面的函數(shù) export const mutations = { // 每個屬性都是一個函數(shù), 作為修改 state 的方法 // setAbc(state, data) { // 每個 mutation 函數(shù)都可以接受到兩個參數(shù) // 第一個是 state 對象本身 // 第二是調(diào)用函數(shù)時(shí)額外添加的數(shù)據(jù) // 這里需要做的就是改變 state 數(shù)據(jù) // state.abc = data // 這樣外面調(diào)用這個函數(shù), 并且傳入數(shù)據(jù), 即可改變當(dāng)前的 abc 屬性 setUserInfo(state, data) { state.userInfo = data } };
項(xiàng)目中需要存儲的地方:
//將結(jié)果發(fā)送到剛剛新建的vuex中,存儲,實(shí)現(xiàn)狀態(tài)持久化,不然刷新之后數(shù)據(jù)就沒了 this.$store.commit('userstore/setUserInfo',res.data)
項(xiàng)目中需要使用的地方:
computed:{ userInfo(){ return this.$store.state.userstore.userInfo } }, ----------渲染頭像----------------- <el-dropdown v-if="userInfo.token"> <img :src="baseURL+userInfo.user.defaultAvatar"/> {{userInfo.user.nickname}}
修改完后重新啟動項(xiàng)目即可。
3.踩坑
引入后可能出現(xiàn)window is not defined 問題:
- 檢查nuxt.config.js中是否將ssr置為false
- 將nuxt.config.js中mode設(shè)置為’spa’
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue.js項(xiàng)目 el-input 組件 監(jiān)聽回車鍵實(shí)現(xiàn)搜索功能示例
今天小編就為大家分享一篇vue.js項(xiàng)目 el-input 組件 監(jiān)聽回車鍵實(shí)現(xiàn)搜索功能示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Vue升級帶來的elementui沖突警告:Invalid prop: custom va
在頁面渲染的時(shí)候,控制臺彈出大量警告,嚴(yán)重影響控制臺的信息獲取功能,但是頁面基本能正常顯示,這是因?yàn)閂ue升級帶來的elementui沖突警告: Invalid prop: custom validator check failed for prop “type“.的解決方案,本文給大家介紹了詳細(xì)的解決方案2025-04-04詳解windows下vue-cli及webpack 構(gòu)建網(wǎng)站(四) 路由vue-router的使用
本篇文章主要介紹了windows下vue-cli及webpack 構(gòu)建網(wǎng)站(四) 路由vue-router的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Vue 讓元素抖動/擺動起來的實(shí)現(xiàn)代碼
這篇文章主要介紹了Vue 讓元素抖動/擺動起來的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解
這篇文章主要介紹了vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Ant Design Vue pro 動態(tài)路由的實(shí)現(xiàn)和打包方式
這篇文章主要介紹了Ant Design Vue pro 動態(tài)路由的實(shí)現(xiàn)和打包方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06