场景:在做的一个项目中多个页面都需要使用到mqtt接收消息,但这样的话每个页面就都需要连接一次mqtt,并且要再次配置options信息、订阅主题、接收消息,非常的不方便,因此琢磨将mqtt封装到vuex中,使其可以多页面通用,这样只需要连接订阅一次,接收到的消息可以存储在vuex中。
mqtt在线测试工具:http://www.emqx.io/online-mqtt-client
一、安装mqtt
npm install mqtt
二、暴露出main.js中的vue实例
使用export default暴露出app
import {
createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
const app = createApp(App)
app.use(ElementPlus)
app.use(store).use(router).mount('#app')
export default app
三、封装mqtt
将mqtt服务封装到VUEX中,可以解决多页面需要用到mqtt接收消息时,每个页面都要再次配置、连接、订阅主题等问题
import {
createStore } from 'vuex'
import main from "../main";//main.ts文件中要暴露app
import router from '@/router';// 引入vuex
export default createStore({
state: {
topics: [],//订阅话题
},
mutations: {
//mqtt服务
MQTT_SERVICE(state, event){
// mqtt连接成功
main.config.globalProperties.$mqtt.on('connect', (e) => {
console.log('连接成功:', e)
// console.log(state.topics)
main.