Giter Club home page Giter Club logo

Comments (1)

mzaiprog avatar mzaiprog commented on June 10, 2024

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.