使用websocket通过vuex来存储数据

1 篇文章 0 订阅

使用vuex需要遵守的规则

1.应用层级的状态应该集中到单个 store 对象中。
2.提交 mutation 是更改状态的唯一方法,并且这个过程是同步的。
3.异步逻辑都应该封装到 action 里面。

在做vuex时请熟记以上的3条规则!非常重要!!

代码

这边vuex用了module管理代码,内容如下:

const state = {
    websock: null,	//websock变量
    eventlist:null,	//onmessage 返回的数据
};

// getters.js
const getters = {
    eventlist(state) {
        return state.eventlist;
    },
    websock(state) {
        return state.websock;
    },
};

// mutations 进行数据状态的变化
const mutations = {
    //申明并连接websocket,
    //在mutation也能定义websocket的一些方法,但是在vuex严格模式下,异步处理数据浏览器会抛出错误。所以只是申明了websocket
    WEBSOCKET_INIT(state,url){
        state.websock = new WebSocket(url)
    },
    //将接收到的数据赋值
    WEBSOCKET_REIVE(state, data) {
        state.eventlist = data;
    }
};

// actions 改变状态的操作
const actions = {
    WEBSOCKET_INIT({commit},url){
        commit('WEBSOCKET_INIT',url);
        state.websock.onopen = function () {
            console.log("连接成功!");
        };
        state.websock.οnerrοr=function(e) { //错误
            console.log("ws错误!");
            console.log(e);
        };
        //websocket与后端链接的数据,为异步链接的方式!
        state.websock.onmessage = function (callBack) {
            // console.log("ws接收",callBack.data);
            //后端返回的数据,在mutations内进行修改
            commit('WEBSOCKET_REIVE', callBack.data);
        };
    },
    //发送消息
    WEBSOCKET_REIVE({commit}, data) {
        let _msg = JSON.stringify(data);
        state.websock.send(_msg);
    }
};
export default  {
    state,
    getters,
    actions,
    mutations
}

在页面申明websocket代码

这里使用dispatch,调用action内的方法,开始websocke的链接

 let _userId = this.$store.getters.currentUser.userId;
 this.$store.dispatch('WEBSOCKET_INIT',"ws://10.254.10.68:8086/websocket/" + _userId)

页面需要发送消息时引用以下代码!

this.$store.dispatch("WEBSOCKET_REIVE",data);
引用vuex内的变量
watch: {
        websockMsg: function (n, o) {
            if (n !== o && n) {
                let _data = JSON.parse(n);
                //根据数据的变化做出相应的处理
                this.messageList.push(_data);
            }
        },
    },
computed:{
        websockMsg() {
            return this.$store.getters.eventlist;
        }
    },

websocket的onmessage数据处理算是最主要的问题了,只要了解vuex的异步处理和同步处理的逻辑,放在正确的位置就可以了,清明节时,无聊实现的有不足的欢迎交流。

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在Vue2中使用WebSocket实时展示数据,你可以按照以下步骤进行操作: 1. 安装WebSocket库:使用npm或yarn安装`vue-native-websocket`库,它是Vue的WebSocket插件。 ```bash npm install vue-native-websocket ``` 2. 在Vue项目中引入WebSocket插件:在`main.js`或者你希望使用WebSocket的组件中引入WebSocket插件。 ```javascript import VueNativeSock from 'vue-native-websocket'; ``` 3. 配置WebSocket连接:在`main.js`中配置WebSocket连接,可以设置WebSocket的URL和选项。 ```javascript Vue.use(VueNativeSock, 'ws://your-websocket-url', { format: 'json', reconnection: true, reconnectionAttempts: 5, reconnectionDelay: 3000, }); ``` 4. 创建Vue组件:创建一个Vue组件,用于展示WebSocket实时获取的数据。 ```vue <template> <div> <ul> <li v-for="data in websocketData" :key="data.id">{{ data }}</li> </ul> </div> </template> <script> export default { data() { return { websocketData: [], }; }, created() { // 监听websocket消息 this.$options.sockets.onmessage = (message) => { // 处理接收到的消息 this.websocketData.push(JSON.parse(message.data)); }; }, }; </script> ``` 在这个例子中,Vue组件会通过`this.websocketData`数组来保存WebSocket实时获取的数据。当收到WebSocket消息时,会将数据解析为JSON格式,并添加到`this.websocketData`数组中。 5. 使用WebSocket组件:在需要展示实时数据的页面中,使用上面创建的Vue组件。 ```vue <template> <div> <WebSocketComponent /> </div> </template> <script> import WebSocketComponent from './WebSocketComponent.vue'; export default { components: { WebSocketComponent, }, }; </script> ``` 通过将WebSocket组件引入到页面中,就可以实时展示从服务器获取的数据。 以上就是在Vue2中使用WebSocket实时展示数据的基本步骤。你可以根据实际需求进行进一步的定制和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值