Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

React und Socket.io Client richtig benutzen

#React

Möchte man socket.io und react zusammen benutzen, so kommt man schnell in die Schwierigkeit, dass die React-App mehrere verschiedene Verbindungen aufmacht und zu oft reagiert. Das Ganze lässt sich schnell und einfach mit einem Context-Provider verbinden und man hat die Verbindung in allen Komponenten.

1. Socket Context erstellen

Am besten einfach eine Datei unter context/socket.js erstellen

https://dev.to/bravemaster619/how-to-use-socket-io-client-correctly-in-react-app-o65

https://dev.to/bravemaster619/how-to-prevent-multiple-socket-connections-and-events-in-react-531d

import socketio from "socket.io-client";

export const socket = socketio.connect('yourdomain.com:4001');
export const SocketContext = React.createContext();

Das ist auch schon alles, was man für den Provider benötigt. Als nächstes muss am besten in der index.js oder app.js die Verbindung initialisiert werden.

2. Context-Provider einbinden und einen Wert mitgeben

Das Ganze sieht dann so aus:

import {SocketContext, socket} from 'context/socket';
import Child from 'components/Child';

const App = () => {
  return (
    <SocketContext.Provider value={socket}>
      <Child />
      <Child />
      ...
    </SocketContext.Provider
  );
};

3. Socket in untergeordneter Komponente benutzen

 

import React from 'react';
import {SocketContext} from 'context/socket';

const GrandChild = () => {

  const socket = useContext(SocketContext);

  useEffect(() => {
    socket.emit('ANYTHING'"'); 

    // subscribe to socket events
    socket.on('ANYSOCKETEVENT', (data) => {
		console.log(data);
	}); 

    return () => {
      // before the component is destroyed
      // unbind all event handlers used in this component
      socket.off('ANYSOCKETEVENT');
    };
  }, [socket]);

  return (
    <div>
      Test
    </div>
  );
};

Kommentare

Es gibt noch keine Kommentare. Sei der Erste!

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.