詳解vuex結(jié)合localstorage動態(tài)監(jiān)聽storage的變化
需求:不同組件間共用同一數(shù)據(jù),當(dāng)一個組件將數(shù)據(jù)發(fā)生變化時,其他組件也可以響應(yīng)該變化。
分析:vue無法監(jiān)聽localstorage的變化。localstorage主要用于不同頁面間傳值,vue適合組件間傳值。對于組件間共用同一數(shù)據(jù)又想保存住信息或者再頁面刷新的時候不丟失數(shù)據(jù)(vuex在頁面刷新的時候存儲的值會丟失,localstorage存儲在本地瀏覽器中),可以采用vuex+localstorage的方式。
關(guān)于vuex和storage的區(qū)別
1.最重要的區(qū)別:vuex存儲在內(nèi)存,localstorage則以文件的方式存儲在本地
2.應(yīng)用場景:vuex用于組件之間的傳值,localstorage則主要用于不同頁面之間的傳值。
3.永久性:當(dāng)刷新頁面時vuex存儲的值會丟失,localstorage不會。
注:很多同學(xué)覺得用localstorage可以代替vuex, 對于不變的數(shù)據(jù)確實可以,但是當(dāng)兩個組件共用一個數(shù)據(jù)源(對象或數(shù)組)時,如果其中一個組件改變了該數(shù)據(jù)源,希望另一個組件響應(yīng)該變化時,localstorage無法做到,原因就是區(qū)別1。
關(guān)于vuex參考文檔:http://vuex.vuejs.org/zh-cn/index.html
實現(xiàn)過程:以首頁展示用戶頭像信息,修改個人信息在公共組件頭部組件中為例,當(dāng)用戶修改個人信息時首頁的圖片實時變化,如果不對頭像信息做存儲更新,每次用戶修改完只有刷新頁面或者從其他頁面返回回來才能看到變化,即新設(shè)置的頭像信息,僅展示核心代碼。
1.首先先定義一個變量在state中。State負(fù)責(zé)存儲整個應(yīng)用的狀態(tài)數(shù)據(jù),后期就可以使用this.$store.state直接獲取狀態(tài)。也可以利用vuex提供的mapState輔助函數(shù)將state映射到計算屬性中去。
const state = { imgInfo:null //首頁頭像信息 }
2.mutations里面存儲localstorage的信息。Mutations可以更改狀態(tài),本質(zhì)就是用來處理數(shù)據(jù)的函數(shù),其接收唯一參數(shù)值state。定義的mutation必須是同步函數(shù)。this.$store.commit(mutationName)是用來觸發(fā)一個mutation的方法,或者使用輔助函數(shù)mapMutations直接將觸發(fā)函數(shù)映射到methods上,這樣就能在元素事件綁定上直接使用了。
export const SETIMGINFO = 'SETIMGINFO' [SETIMGINFO] (state,info) { state.imgInfo=info localStorage.setItem('imgInfo',info) }
3.getter里面獲取localstorage的信息。有些狀態(tài)需要做二次處理,就可以使用getters。通過this.$store.getters.valueName對派生出來的狀態(tài)進行訪問?;蛘咧苯邮褂幂o助函數(shù)mapGetters將其映射到本地計算屬性中去。
getImgInfo(state){ if(localStorage.getItem('imgInfo')){ state.imgInfo=localStorage.getItem('imgInfo') } return state.imgInfo }
4.在需要對storage進行操作的頁面引用mapMutations函數(shù)
import {mapMutations} from 'vuex' //引入mapMutations ...mapMutations([ 'SETIMGINFO' ]), this.SETIMGINFO(this.imgInfo) //在需要的地方引用 mutations里面定義的方法
5.在需要獲取storage信息的頁面引用mapGetters輔助函數(shù)
import {mapGetters} from 'vuex' computed:{ ...mapGetters([ 'getImgInfo' ]) }, watch:{ //動態(tài)監(jiān)聽state的變化,實時改變頁面的數(shù)據(jù) getImgInfo: function(li) { //li就是改變后的state里面的imgInfo let vm = this; this.imgInfo=li //data聲明一個變量,在html引用。如果storage的值發(fā)生變化就實時刷新變量的值。 } },
6.模板中對vuex的值的引用
<img :src="imgInfo?imgInfo:info.avatar"> //三元不等式,如果state發(fā)生變化有值就賦值給img標(biāo)簽,如果沒有即剛進頁面就賦值給create生命周期函數(shù)中從接口讀出來的數(shù)據(jù)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vuex存儲復(fù)雜參數(shù)(如對象數(shù)組等)刷新數(shù)據(jù)丟失的解決方法
- Vue項目如何保持用戶登錄狀態(tài)(localStorage+vuex刷新頁面后狀態(tài)依然保持)
- 使用vuex存儲用戶信息到localStorage的實例
- Vue項目使用localStorage+Vuex保存用戶登錄信息
- vue2.0+vuex+localStorage代辦事項應(yīng)用實現(xiàn)詳解
- 基于vue2.0+vuex+localStorage開發(fā)的本地記事本示例
- vuex存儲數(shù)組(新建,增,刪,更新)并存入localstorage定時刪除功能實現(xiàn)
相關(guān)文章
vue清除瀏覽器全部cookie的問題及解決方法(絕對有效!)
最近項目要實現(xiàn)關(guān)閉瀏覽器清除用戶緩存的功能,下面這篇文章主要給大家介紹了關(guān)于vue清除瀏覽器全部cookie的問題及解決方法,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06基于Vue實現(xiàn)關(guān)鍵詞實時搜索高亮顯示關(guān)鍵詞
這篇文章主要介紹了基于Vue實現(xiàn)關(guān)鍵詞實時搜索高亮顯示關(guān)鍵詞,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07