vuex提交state&&實時監(jiān)聽state數(shù)據(jù)的改變方法
項目背景
websocket長連接 根據(jù)指示進行四個頁面之間的跳轉(zhuǎn),在各頁面執(zhí)行相應(yīng)的邏輯處理。
項目搭建結(jié)構(gòu)如下所示:

解決方案
在四個頁面外面寫個父頁面,router路徑如下所示:

vuex
\src\store\mutations.js
//存儲到vuex里面
[WEBSOCKETDATA](state,socketdata){
state.socketData=null;//vue監(jiān)聽不到數(shù)組的改變 所以清空重置一下就好咯
state.socketData=socketdata
}
\src\store\getters.js
export default {
getterSocketData (state) {
return state.socketData
}
}
\src\store\index.js
import Vue from 'vue' import Vuex from 'vuex' import mutations from './mutations' import getters from './getters'
Vue.use(Vuex)
const state = {
socketData:{},//websocket數(shù)據(jù)
}
export default new Vuex.Store({
state,
mutations,
getters
})
\src\components\index.vue
父頁面
import {mapMutations,mapState} from 'vuex'
export default {
computed:{
...mapState([
'socketData',
])
},
data(){
return{
skip:'2',
webdata:{
"current_item": "111", "show_item": 'false', "cart_item_list": [],"totalPrice":7.5,"delIndexList":[],'addList':[]
},
}
},
mounted(){
// this.initWebsocket()
var addList=[{"sku":"1","num":"2","price":3.5,"name":'蘋果0'}];
var delIndexList=[];
this.webdata.addList=addList;
this.webdata.delIndexList=delIndexList;
this.websocket_data(this.webdata)
console.log("index1--------------------")
console.log(this.socketData);
setTimeout(()=>{//定時器為了模擬websocket發(fā)送數(shù)據(jù)
var addList=[{"sku":"1","num":"2","price":3.5,"name":'蘋果11'}];
var delIndexList=[0];
this.webdata.addList=addList;
this.webdata.delIndexList=delIndexList;
this.$store.commit("websocket_data",this.webdata)//必須寫 要不然getter拿不到改變之后的數(shù)據(jù)
console.log("index--------------------");
console.log(this.socketData);
},1000);
},
}
src\components\shoppingCart.vue
子頁面 根據(jù)websocket傳來的數(shù)據(jù)進行邏輯操作
import {mapState,mapMutations,mapGetters} from 'vuex';
export default {
data(){
return{
prolength:0,
defaultImg: 'this.src="' + require('../assets/defaultImg.png') + '"',
productinfos: {
"current_item": "111", "show_item": 'false', "cart_item_list": [],"totalPrice":7.5,"delIndexList":[],'addList':[]
},
MyMar:'',
}
},
computed: {//監(jiān)聽socketData的變化 做頁面處理
...mapState([
'socketData',
]),
...mapGetters([
'getterSocketData',
])
},
watch:{
getterSocketData(message){//message 就是socketData
console.log(message);//根據(jù)數(shù)據(jù)指示 進行邏輯操作
........................
}
}
}
以上這篇vuex提交state&&實時監(jiān)聽state數(shù)據(jù)的改變方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue2更改data里的變量不生效時,深層更改data里的變量問題
這篇文章主要介紹了vue2更改data里的變量不生效時,深層更改data里的變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
關(guān)于Vue3中defineProps用法圖文詳解
在vue3中組件傳參有很多種方式,和v2大差不差,但是有的地方還是有很多的區(qū)別,下面這篇文章主要給大家介紹了關(guān)于Vue3中defineProps用法的相關(guān)資料,需要的朋友可以參考下2022-11-11
vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出)
這篇文章主要介紹了vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
vue項目登錄頁面實現(xiàn)記住用戶名和密碼的示例代碼
本文主要介紹了vue項目登錄頁面實現(xiàn)記住用戶名和密碼的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-07-07
關(guān)于Vue父子組件傳參和回調(diào)函數(shù)的使用
這篇文章主要介紹了關(guān)于Vue父子組件傳參和回調(diào)函數(shù)的使用,我們將某段代碼封裝成一個組件,而這個組件又在另一個組件中引入,而引入該封裝的組件的文件叫做父組件,被引入的組件叫做子組件,需要的朋友可以參考下2023-05-05
解決VUE項目使用Element-ui 下拉組件的驗證失效問題
這篇文章主要介紹了解決VUE項目使用Element-ui 下拉組件的驗證失效問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

