vue3+ts+Vuex中如何应用websocket协定

本文作者应用的是ts+vue3的setup语法糖,大家留神应用的vue版本!

在stroe中

import { createStore } from 'vuex'import { stateInt } from '../interface/storeInterface'const state: stateInt = {  //推送音讯  data: {},  webSocket: null,}export default createStore({  state,  mutations: {    //websocket初始化    initWebsocket(state) {      state.webSocket = new WebSocket(          // 此处填写你要连贯的ws地址        'ws://127.0.0.1:3000/socket/' + Math.random()      )      //建设连贯      state.webSocket.onopen = function () {        /*         * 连贯胜利         * */        console.log('通信开始')        // 发送心跳避免ws协定主动断联        setInterval(() => {          state.webSocket.send('1')        }, 1000 * 60)      }      //接管服务端音讯      state.webSocket.onmessage = function (e) {        /*         * 收到音讯时回调函数         * */        console.log('收到的数据:', e.data)        // 如果数据对象为字符串,可转换为对象格局        let data = JSON.parse(e.data)        state.data = e.data        console.log(data)      }      state.webSocket.onerror = function () {        /*         * 通信异样         * */        console.log('通信异样')      }      state.webSocket.close = function () {        /*         * 敞开连贯时回调函数         * */        console.log('连贯已断开')      }    },  },  actions: {  },  modules: {},})
/interface/storeInterface 文件下的interface接口
export interface stateInt {  data: Object  webSocket: WebSocket}

vue3中

在App.vue中,语法糖格局下
<script lang="ts" setup>    import { onBeforeMount } from 'vue'    import { useStore } from 'vuex'    /**     * 仓库     */    const store = useStore()    //websocket初始化    const initSocket = () => {      store.commit('initWebsocket')    }        onBeforeMount(() => {      //console.log('2.组件挂载页面之前执行----onBeforeMount')      initSocket()    })</script>