解決VUEX刷新的時候出現(xiàn)數(shù)據(jù)消失
通常,我們在使用vue編寫頁面時,會需要使用vuex在組件間傳遞(或者說共同響應(yīng))同一個數(shù)據(jù)的變化。例如:用戶的登錄信息。
下面,我們使用傳遞用戶登錄信息的例子來一步步解決這個問題。
首先,我們的第一個問題是:我在一個組件(例如登錄組件頁面)中登錄了后,其它頁面要怎么獲取和響應(yīng)這個變化?(就是這么小白,/(ㄒoㄒ)/~~)
這個答案就是使用vuex啦,在中文版的文檔中有這樣一句話:
而這里的計算屬性就是我們的偉大的computed屬性啦~
(至于前面的通過mutation之類的把數(shù)據(jù)存入vuex中的過程就省略了,大家上網(wǎng)搜一下例子一大堆,切忌做伸手黨哦~)
至于用在我們的用戶登錄的例子中就像是下面這樣:
這樣我們就可以在頁面根據(jù)用戶信息響應(yīng)式地顯示內(nèi)容了。
那么,我們的第二個問題來了:我是獲取到了vuex中的用戶信息,但是我一刷新就沒有了??!怎么辦??在線等!十萬火急??!
這個答案就是使用localStorage啦。(了解過html 5的同學(xué)應(yīng)該都知道它,這里我就不科普了。)
一開始我雖然知道可以用localStorage,但是對于使用的邏輯有點亂,所以在這里記一下。
1、在vuex獲取到用戶信息時(例:state.user_id = user_info.user_id),同時把這個信息存入localStorage(Lockr.set('user_id', state.user_id) 這個Lockr是我用了一個叫Lockr的東西,其實它就是localStorage而已,關(guān)于它詳細(xì)的請看https://github.com/tsironis/lockr);
2、我們定義一個mutation方法,再次把數(shù)據(jù)從localStorage傳給state;
3、我們的問題發(fā)生在頁面刷新時,可能很多同學(xué)就會去想在監(jiān)聽頁面刷新事件時觸發(fā)上面第2步的那個方法。其實不用這么麻煩,在computed屬性時,只要我們判斷一下用戶信息是否為空,為空時調(diào)用第2步的那個方法就好了,然后我們把這個state return給那個響應(yīng)屬性就好了;
4、至于為什么這么麻煩在state和localStorage中傳來傳去,是因為state的值刷新后會沒了,而localStorage的值不能響應(yīng)式地變化(Vue 僅可以對其管理的數(shù)據(jù)做響應(yīng)式處理,可以理解為 data 中的數(shù)據(jù),localStorage 并不在 Vue 的管理下,自然不會有響應(yīng)特性);
下面直接上computed處的代碼:
以上就是使用localStorage解決vuex的state的值在刷新之后沒有了這個問題的方法。
方法二:
在mount里面commit一次
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue3?Composition?API優(yōu)雅封裝第三方組件實例
這篇文章主要為大家介紹了Vue3?Composition?API優(yōu)雅封裝第三方組件實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07利用vue.js實現(xiàn)被選中狀態(tài)的改變方法
下面小編就為大家分享一篇利用vue.js實現(xiàn)被選中狀態(tài)的改變方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02vue日常開發(fā)基礎(chǔ)Axios網(wǎng)絡(luò)庫封裝
這篇文章主要為大家介紹了vue日常開發(fā)基礎(chǔ)Axios網(wǎng)絡(luò)庫封裝示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08基于Vue實現(xiàn)HTML轉(zhuǎn)PDF并導(dǎo)出
這篇文章主要為大家介紹了三種方法,可以實現(xiàn)將HTML頁面轉(zhuǎn)為PDF并實現(xiàn)下載。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-04-04vue watch監(jiān)聽對象及對應(yīng)值的變化詳解
下面小編就為大家分享一篇vue watch監(jiān)聽對象及對應(yīng)值的變化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-02-02Vue中的函數(shù)同步執(zhí)行導(dǎo)致的數(shù)據(jù)獲取失敗問題處理辦法
Vue中的mount中有兩個函數(shù),第一個函數(shù)執(zhí)行完后給data中的userInfo賦值,但是第二個函數(shù)獲取userInfo時是空值,這種情況可能是因為第二個函數(shù)在獲取 userInfo 時發(fā)生在第一個函數(shù)執(zhí)行完之前,所以本文給大家介紹了Vue中的函數(shù)同步執(zhí)行導(dǎo)致的數(shù)據(jù)獲取失敗問題處理辦法2024-08-08