欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vuex頁面刷新數(shù)據(jù)丟失解決方法詳解

 更新時間:2023年07月14日 09:35:09   作者:醉前端  
這篇文章主要為大家介紹了vuex頁面刷新數(shù)據(jù)丟失解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

原因

在vue項目中用vuex來做全局的狀態(tài)管理, 發(fā)現(xiàn)當刷新網(wǎng)頁后,保存在vuex實例store里的數(shù)據(jù)會丟失。

因為store里的數(shù)據(jù)是保存在運行內(nèi)存中的,當頁面刷新時,頁面會重新加載vue實例,store里面的數(shù)據(jù)就會被重新賦值初始化

解決思路

將state的數(shù)據(jù)保存在localstorage、sessionstorage或cookie中(三者的區(qū)別),這樣即可保證頁面刷新數(shù)據(jù)不丟失且易于讀取。

  • localStorage: localStorage的生命周期是永久的,關(guān)閉頁面或瀏覽器之后localStorage中的數(shù)據(jù)也不會消失。localStorage除非主動刪除數(shù)據(jù),否則數(shù)據(jù)永遠不會消失。
  • sessionStorage:sessionStorage的生命周期是在僅在當前會話下有效。sessionStorage引入了一個“瀏覽器窗口”的概念,sessionStorage是在同源的窗口中始終存在的數(shù)據(jù)。只要這個瀏覽器窗口沒有關(guān)閉,即使刷新頁面或者進入同源另一個頁面,數(shù)據(jù)依然存在。但是sessionStorage在關(guān)閉了瀏覽器窗口后就會被銷毀。同時獨立的打開同一個窗口同一個頁面,sessionStorage也是不一樣的。
  • cookie:cookie生命期為只在設(shè)置的cookie過期時間之前一直有效,即使窗口或瀏覽器關(guān)閉。 存放數(shù)據(jù)大小為4K左右,有個數(shù)限制(各瀏覽器不同),一般不能超過20個。缺點是不能儲存大數(shù)據(jù)且不易讀取。

由于vue是單頁面應(yīng)用,操作都是在一個頁面跳轉(zhuǎn)路由,因此sessionStorage較為合適,原因如下:

  • sessionStorage可以保證打開頁面時sessionStorage的數(shù)據(jù)為空;
  • 每次打開頁面localStorage存儲著上一次打開頁面的數(shù)據(jù),因此需要清空之前的數(shù)據(jù)。

vuex中state數(shù)據(jù)的修改必須通過mutation方法進行修改,因此mutation修改state的同時需要修改sessionstorage,問題倒是可以解決但是感覺很麻煩,state中有很多數(shù)據(jù),很多mutation修改state就要很多次sessionstorage進行修改,既然如此直接用sessionstorage解決不就行了,為何還要用vuex多此一舉呢?
vuex的數(shù)據(jù)在每次頁面刷新時丟失,是否可以在頁面刷新前再將數(shù)據(jù)存儲到sessionstorage中呢,是可以的,beforeunload事件可以在頁面刷新前觸發(fā),但是在每個頁面中監(jiān)聽beforeunload事件感覺也不太合適,那么最好的監(jiān)聽該事件的地方就在app.vue中。

  • 在app.vue的created方法中讀取sessionstorage中的數(shù)據(jù)存儲在store中,此時用vuex.store的replaceState方法,替換store的根狀態(tài)
  • 在beforeunload方法中將store.state存儲到sessionstorage中。

代碼如下

export default {
  name: 'App',
  created () {
    //在頁面加載時讀取sessionStorage里的狀態(tài)信息
    if (sessionStorage.getItem("store") ) {
        this.$store.replaceState(Object.assign({}, this.$store.state,JSON.parse(sessionStorage.getItem("store"))))
    } 
    //在頁面刷新時將vuex里的信息保存到sessionStorage里
    window.addEventListener("beforeunload",()=>{
        sessionStorage.setItem("store",JSON.stringify(this.$store.state))
    })
  }
}

以上就是vuex頁面刷新數(shù)據(jù)丟失解決方法詳解的詳細內(nèi)容,更多關(guān)于vuex頁面刷新數(shù)據(jù)丟失解決的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Vue Element UI 表單自定義校驗規(guī)則及使用

    Vue Element UI 表單自定義校驗規(guī)則及使用

    這篇文章主要介紹了Vue Element UI 表單自定義效驗規(guī)則及使用,文中通過代碼介紹了常見表單效驗規(guī)則,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • vue中@click如何綁定多個事件

    vue中@click如何綁定多個事件

    這篇文章主要介紹了vue中@click如何綁定多個事件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • vue如何給數(shù)組添加新對象并賦值

    vue如何給數(shù)組添加新對象并賦值

    這篇文章主要介紹了vue如何給數(shù)組添加新對象并賦值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3中的reactive函數(shù)聲明數(shù)組方式

    vue3中的reactive函數(shù)聲明數(shù)組方式

    這篇文章主要介紹了vue3中的reactive函數(shù)聲明數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue+TailWindcss實現(xiàn)一個簡單的闖關(guān)小游戲

    Vue+TailWindcss實現(xiàn)一個簡單的闖關(guān)小游戲

    本文將利用Vue+TailWindcss實現(xiàn)一個簡單的闖關(guān)小游戲,玩家須躲避敵人與陷阱到達終點且擁有多個關(guān)卡,感興趣的小伙伴可以了解一下
    2022-04-04
  • vue-router 學習快速入門

    vue-router 學習快速入門

    本篇文章主要介紹了vue-router 學習快速入門,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • VUE前后端學習tab寫法實例

    VUE前后端學習tab寫法實例

    在本篇文章里小編給大家分享了關(guān)于VUE前后端學習tab寫法實例以及相關(guān)知識點,需要的朋友們參考下。
    2019-08-08
  • vue?elementui動態(tài)添加el-input實例代碼

    vue?elementui動態(tài)添加el-input實例代碼

    最近遇到一個新的需求,需要動態(tài)添加el-input,這篇文章主要給大家介紹了關(guān)于vue?elementui動態(tài)添加el-input的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • 解決v-model雙向綁定失效的問題

    解決v-model雙向綁定失效的問題

    這篇文章主要介紹了解決v-model雙向綁定失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue?組件通信的多種方式

    vue?組件通信的多種方式

    這篇文章主要介紹了vue?組件通信的幾種方式,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03

最新評論