vuex提交state&&實時監(jiān)聽state數(shù)據(jù)的改變方法
項目背景
websocket長連接 根據(jù)指示進(jìn)行四個頁面之間的跳轉(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ù)進(jìn)行邏輯操作
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ù)指示 進(jìn)行邏輯操作 ........................ } } }
以上這篇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-11vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出)
這篇文章主要介紹了vue如何導(dǎo)出文件流獲取附件名稱并下載(在response.headers里解析filename導(dǎo)出),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07vue項目登錄頁面實現(xiàn)記住用戶名和密碼的示例代碼
本文主要介紹了vue項目登錄頁面實現(xiàn)記住用戶名和密碼的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧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