最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vuex頁面刷新數(shù)據(jù)不丟失的幾種解決方案

 更新時(shí)間:2025年07月23日 09:12:27   作者:江城開朗的豌豆  
相信很多用Vuex做狀態(tài)管理的同學(xué)都遇到過這個(gè)問題——明明登錄成功了,一刷新頁面又跳回登錄頁;購物車?yán)锏纳唐?刷新后全空了,今天我就來分享幾種解決方案,幫你徹底搞定這個(gè)煩人的問題

大家好。今天想和大家聊聊一個(gè)Vue項(xiàng)目中經(jīng)常遇到的坑:用Vuex存儲的數(shù)據(jù),一刷新頁面就沒了!

相信很多用Vuex做狀態(tài)管理的同學(xué)都遇到過這個(gè)問題——明明登錄成功了,一刷新頁面又跳回登錄頁;購物車?yán)锏纳唐?,刷新后全空了。今天我就來分享幾種解決方案,幫你徹底搞定這個(gè)煩人的問題。

一、為什么Vuex數(shù)據(jù)會丟失?

先搞清楚原理:Vuex的數(shù)據(jù)是存在內(nèi)存中的。這就意味著:

  • 頁面刷新 → 瀏覽器重新加載 → JavaScript內(nèi)存重置 → Vuex數(shù)據(jù)清空

所以要想持久化數(shù)據(jù),我們必須把數(shù)據(jù)存到“不會輕易丟失”的地方。常見的有三種方案:

二、解決方案1:localStorage/sessionStorage(簡單粗暴)

這是最直接的方案,在Vuex數(shù)據(jù)變化時(shí)同步到Storage:

// store/index.js
const store = new Vuex.Store({
  state: {
    userInfo: JSON.parse(localStorage.getItem('userInfo')) || null
  },
  mutations: {
    setUserInfo(state, payload) {
      state.userInfo = payload
      localStorage.setItem('userInfo', JSON.stringify(payload)) // 同步存儲
    },
    clearUserInfo(state) {
      state.userInfo = null
      localStorage.removeItem('userInfo') // 清除存儲
    }
  }
})

// 使用示例
methods: {
  login() {
    const myData = { name: '小楊', token: 'abc123' }
    this.$store.commit('setUserInfo', myData)
  }
}

優(yōu)點(diǎn)

  • 實(shí)現(xiàn)簡單,無需額外庫
  • 數(shù)據(jù)真·持久化(除非用戶手動清除)

缺點(diǎn)

  • 需要手動同步,容易遺漏
  • 存儲大小有限(通常5MB)

三、解決方案2:vuex-persistedstate(優(yōu)雅推薦)

如果你不想自己寫存儲邏輯,可以用這個(gè)現(xiàn)成插件:

npm install vuex-persistedstate
// store/index.js
import createPersistedState from 'vuex-persistedstate'

const store = new Vuex.Store({
  // ...
  plugins: [
    createPersistedState({
      key: 'my-vuex-storage', // 存儲的key名
      paths: ['userInfo', 'cart'], // 只持久化指定模塊
      storage: window.sessionStorage // 改用sessionStorage
    })
  ]
})

插件原理

  1. 在Vuex初始化時(shí)從storage讀取數(shù)據(jù)
  2. 訂閱mutation,數(shù)據(jù)變化時(shí)自動更新storage

進(jìn)階配置

createPersistedState({
  storage: {
    getItem: key => uni.getStorageSync(key), // 小程序兼容方案
    setItem: (key, value) => uni.setStorageSync(key, value),
    removeItem: key => uni.removeStorageSync(key)
  }
})

四、解決方案3:Cookie(適合配合SSR)

如果需要和后端交互(比如自動帶token),可以用Cookie存儲:

import Cookies from 'js-cookie'

const store = new Vuex.Store({
  state: {
    token: Cookies.get('token') || null
  },
  mutations: {
    setToken(state, token) {
      state.token = token
      Cookies.set('token', token, { expires: 7 }) // 7天后過期
    }
  }
})

Cookie vs localStorage

特性CookielocalStorage
容量4KB左右5MB左右
是否隨請求發(fā)送是(需注意安全)
服務(wù)端是否可讀

五、性能與安全注意事項(xiàng)

不要什么數(shù)據(jù)都存:只存必要數(shù)據(jù)(如用戶token、基礎(chǔ)信息)

敏感信息處理

// 錯(cuò)誤示范!存了密碼明文
localStorage.setItem('password', '123456') 

// 正確做法:只存token
localStorage.setItem('token', '加密后的字符串')

定期清理:設(shè)置合理的過期時(shí)間

大對象慎存:可能影響頁面加載性能

六、終極方案:組合拳

在我的實(shí)際項(xiàng)目中,通常會這樣搭配使用:

  • 用戶token → Cookie存儲(方便SSR和HTTP自動攜帶)
  • 用戶基礎(chǔ)信息 → localStorage + Vuex(減少接口請求)
  • 臨時(shí)數(shù)據(jù) → 純Vuex(如表單填寫狀態(tài))

七、總結(jié)

方案適用場景一句話評價(jià)
localStorage需要長期存儲的簡單數(shù)據(jù)簡單但需手動同步
vuex-persistedstate需要自動同步的復(fù)雜狀態(tài)優(yōu)雅但需引入額外依賴
Cookie需要服務(wù)端讀取或SSR項(xiàng)目注意安全性和容量限制

最后提醒大家:前端存儲永遠(yuǎn)不可信!  所有關(guān)鍵權(quán)限校驗(yàn)必須走后端接口。

寫在最后?

到此這篇關(guān)于Vuex頁面刷新不丟失的幾種解決方案的文章就介紹到這了,更多相關(guān)Vuex頁面刷新不丟失內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue-router的兩種模式的區(qū)別

    vue-router的兩種模式的區(qū)別

    這篇文章主要介紹了vue-router的兩種模式的區(qū)別,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • vue3 表單搜索內(nèi)容回顯到地址欄的實(shí)例代碼

    vue3 表單搜索內(nèi)容回顯到地址欄的實(shí)例代碼

    這篇文章主要介紹了vue3 表單搜索內(nèi)容回顯到地址欄的實(shí)例代碼,地址欄輸入內(nèi)容回顯到form表單,同理表單輸入內(nèi)容也要回顯到地址欄中,本文結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • 在Vue中使用xlsx組件實(shí)現(xiàn)Excel導(dǎo)出功能的步驟詳解

    在Vue中使用xlsx組件實(shí)現(xiàn)Excel導(dǎo)出功能的步驟詳解

    在現(xiàn)代Web應(yīng)用程序中,數(shù)據(jù)導(dǎo)出到Excel格式是一項(xiàng)常見的需求,Vue.js是一種流行的JavaScript框架,允許我們構(gòu)建動態(tài)的前端應(yīng)用程序,本文將介紹如何使用Vue.js和xlsx組件輕松實(shí)現(xiàn)Excel數(shù)據(jù)導(dǎo)出功能,需要的朋友可以參考下
    2023-10-10
  • Vue?3.0?v-for中的Ref數(shù)組用法小結(jié)

    Vue?3.0?v-for中的Ref數(shù)組用法小結(jié)

    在?Vue?2?中,在?v-for?里使用的?ref?attribute會用ref?數(shù)組填充相應(yīng)的?$refs?property,本文給大家介紹Vue?3.0?v-for中的Ref數(shù)組的相關(guān)知識,感興趣的朋友一起看看吧
    2023-12-12
  • vue實(shí)現(xiàn)虛擬滾動渲染成千上萬條數(shù)據(jù)

    vue實(shí)現(xiàn)虛擬滾動渲染成千上萬條數(shù)據(jù)

    本文主要介紹了vue實(shí)現(xiàn)虛擬滾動渲染成千上萬條數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能

    基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能

    這篇文章主要介紹了基于el-table實(shí)現(xiàn)行內(nèi)增刪改功能,用過通過操作按鈕點(diǎn)擊刪除或者編輯功能即可實(shí)現(xiàn)相應(yīng)的效果,下面小編給大家分享實(shí)例代碼感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Vue監(jiān)聽數(shù)組變化源碼解析

    Vue監(jiān)聽數(shù)組變化源碼解析

    這篇文章主要為大家詳細(xì)解析了Vue監(jiān)聽數(shù)組變化的源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 如何使用JS監(jiān)聽一個(gè)變量改變

    如何使用JS監(jiān)聽一個(gè)變量改變

    在JS編程中如果能監(jiān)測變量的內(nèi)容,當(dāng)變量值發(fā)生變化時(shí),實(shí)時(shí)發(fā)出通知,這定是一項(xiàng)很有用的功能,下面這篇文章主要給大家介紹了關(guān)于如何使用JS監(jiān)聽一個(gè)變量改變的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • vue父子組件傳值不能實(shí)時(shí)更新的解決方法

    vue父子組件傳值不能實(shí)時(shí)更新的解決方法

    Vue是一個(gè)以數(shù)據(jù)驅(qū)動、組件化的前端框架,其中組件化是Vue中較為重要的概念之一,組件之間的通信則成為Vue中較為普遍的需求,下面這篇文章主要給大家介紹了關(guān)于vue父子組件傳值不能實(shí)時(shí)更新的解決方法,需要的朋友可以參考下
    2023-05-05
  • 利用vue實(shí)現(xiàn)密碼輸入框/驗(yàn)證碼輸入框

    利用vue實(shí)現(xiàn)密碼輸入框/驗(yàn)證碼輸入框

    這篇文章主要為大家詳細(xì)介紹了如何利用vue實(shí)現(xiàn)密碼輸入框或驗(yàn)證碼輸入框的效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2023-08-08

最新評論

达日县| 阿拉尔市| 鸡西市| 西乌珠穆沁旗| 东至县| 施秉县| 三门峡市| 甘洛县| 柳江县| 青州市| 德江县| 牡丹江市| 县级市| 随州市| 桃源县| 清丰县| 桐城市| 易门县| 商都县| 开封市| 万盛区| 彩票| 金寨县| 灵石县| 吉林省| 文成县| 许昌市| 垫江县| 罗甸县| 开平市| 安阳市| 太康县| 黑山县| 东丽区| 阜新| 普兰店市| 怀化市| 青神县| 兴化市| 台东市| 遂宁市|