Comments (1)
From the vue-3-socket.io's source point of view, possibly injecting the socketIO instance into the vuex instance would break the design pattern. So I like to share this small code snippet, that solved my issue by injecting vue-3-socket.io into the vuex store via main.js:
main.js:
import { createApp } from "vue";
import App from "./App";
import store from "./store";
import socket from "./socket";
// inject vue-3-socket.io into the vuex store
store.$socket = socket;
const app = createApp(App);
app.use(store);
app.use(socket);
app.mount("#app");
Following is some usage Example:
store.js:
import { createStore } from "vuex";
export default createStore({
state() {
return {
message: "default message",
};
},
mutations: {
SOCKET_updateMessage(state, message) {
console.log("SOCKET_updateMessage: message:", message);
state.message = message;
},
updateMessage(state, message) {
console.log("updateMessage: message:", message);
this.$socket.io.emit("fromClientStore", "updateMessage", message);
},
},
});
socket.js:
import SocketIO from 'socket.io-client';
import VueSocketIO from "vue-3-socket.io";
import store from "./store";
export default new VueSocketIO({
debug: true,
connection: SocketIO(),
vuex: {
store,
actionPrefix: "SOCKET_",
mutationPrefix: "SOCKET_",
},
});
Express server's index.js:
import http from "http";
import expressCls from "express";
import { Server as SocketIOServer } from "socket.io";
class Server {
clientSocket = null;
constructor(port = 80) {
// define network layer
console.log("Server.constructor: (define network layer) port:", port);
this.expressObj = expressCls();
this.httpServer = http.createServer(this.expressObj);
this.svrIO = new SocketIOServer(this.httpServer);
this.svrIO.on("connection", (socket) => {
console.log("svrIO.on: connection: socket.id:", socket.id);
this.clientSocket = socket;
socket.on("fromClientStore", (action, message) => {
console.log("socket.on: fromClientStore/" + action + ": message:", message);
server.clientSocket.emit("updateMessage", message);
});
socket.on("disconnect", (reason) => {
console.log("socket.on: disconnect: socket.id:", socket.id, "reason:", reason);
});
});
this.expressObj.use(expressCls.static("client/dist"));
this.httpServer.listen(port, () => {
console.log("Open your browser: http://localhost:" + port);
});
}
}
const server = new Server();
app.vue:
<template>
<h1>$store.state.message: {{ $store.state.message }}</h1>
<button @click.prevent="$store.commit('updateMessage', 'Button pressed')">updateMessage</button>
</template>
from vue-socket.io.
Related Issues (20)
- NPM package source code differences
- The npm package (dist/vue-socketio.js) not synchronized github(dist/vue-socketio.js)
- Anybody get this work with antfu/vitesse boiler plate? HOT 1
- How to use the specified socket.io version
- Pinia Support HOT 2
- connect function dos not trigger HOT 1
- Resolve name conflicts when 2 npm modules have component with same $socket
- Multiple socket connections
- Reconnect event does not to be trigger
- The `Connection` event didn't works for WSS. But it works for WS.
- New socket instance created if vuex’s store mutation function called inside socket
- Examples not opening
- 后期会支持vue3吗 HOT 1
- can't receive emit from server,my problem?
- Upgrade SocketIO version for FlaskSocketIO compatibility
- Update query param for socket.io reconnect HOT 1
- vue-socket.io 提供Vue3支持方案
- 我这可以支持Vue3哦!快来看~
- Here is a package that may help you if you want to use over Vue3.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from vue-socket.io.