vuex:專為vue開發的一個狀態管理模式,相當於保存數據的一個大倉庫,可以在任何地方對數據進行改變,其他組件中使用該數據時可以實時更新。
localstorage:瀏覽器緩存,將數據保存在本地,除非被清除,否則永久保存。
兩者區別:
1.vuex中的數據是保存在內存,所以刷新頁面相當於是清除內存,vuex中保存的數據會清空。而localstorage中的數據是保存在本地,刷新頁面數據仍然存在。
2.vuex主要用於多組件通信,在其中一個組件中改變數據時,其他組件實時獲取。而localstorage不會。
3.vuex經常用於保存需要經常改變的數據,如果數據不怎么改變的話,可以考慮只使用localstorage保存,多個頁面獲取使用。
可以結合兩者,實現組件內通信,同時刷新頁面時數據不丟失。
實現代碼:
1.vuex:
state:{
catalog_id: '',
},
mutations:{
setCatalog_id: (state, catalog_id) => {
localStorage.setItem('catalog_id',catalog_id);
state.catalog_id = catalog_id;
}
},
const getters = {
getCatalog_id: (state) => {
state.user.catalog_id = localStorage.getItem('catalog_id');
return state.user.catalog_id;
}
}
2.其中一個組件中改變數據:
handleNodeClickThis(node,data,value){
this.catalog_id = node.catalog_id;
this.treeCur = 1;
this.$store.commit('setCatalog_id', this.catalog_id);
// localStorage.setItem('catalog_id', this.catalog_id)
}
3.其他組件中監聽數據的改變,並做出其他操作:
computed: {
catalog_id(){
return this.$store.getters.getCatalog_id;
// return localStorage.getItem('catalog_id')
}
},
watch: {
catalog_id: function(){
this.getFileInfo();
}
},
注意:
1.在監聽數據catalog_id時,需要先使用computed計算出該數據在state中的值,然后再使用watch監聽數據的變化,做其他操作。
2.將catalog_id直接在data中賦值,數據改變時,通過watch是監聽不到的,因為data里的數據在組件加載完成后就初始化完了,只能被動改變,不能自動做出更新。
3.只使用localstorage存儲數據,通過watch也是監聽不到的,因為數據保存在本地,不在內存中。
4.vuex結合localstorage,就相當於是在set和get值時,多使用了localstorage來存儲和獲取。關於vuex的詳細介紹,下次補上。
5.state中存的數據的值和通過get來取數據的值,因為多了一層localstorage,刷新之后會不同。
