Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

130
Visualizações
Correct way of connecting Websocket events to update my React Component

So I'm primarily a C++ backend developer but I'm learning React on the side and I have this really simple file to use websockets.

import React, { useState } from "react";

var serverMessage = "";
var webSocketReady = false;

function connect() {
   webSocket = new WebSocket("ws://127.0.0.1:3000/ws")

   webSocket.onopen = (event) => {
     webSocketReady = true;
   };

   webSocket.onmessage = function (event) {
     serverMessage = JSON.parse(event.data);
   };

   webSocket.onclose = function (event)
   {
     webSocketReady = false;
     setTimeout(function() {
         connect();
       }, 1000);
   };

   webSocket.onerror = function (err)
   {
     console.log('Socket encountered error: ', err.message, 'Closing socket')
     webSocket.close();
   };
}

connect();

export default function MyTestComponent({
  ...props
}) {
   const [varThatNeedHooks, setVar] = useState({});
   if (!webSocketReady)
   {
     return (<h1>Could not connect to server retrying ...</h1>);
   }
   else if (serverMessage == "")
   {
     return (<h1>Waiting for message from server ...</h1>);
   }
   else
   {
     // do stuff with varThatNeedHooks
   }
}

I'm looking at the react documentation and I realized this way that I'm connecting the websocket to MyTestComponent has got to be wrong. But I'm not sure what is the "React" way of hooking up the events from the websocket to change what gets rendered. Anyone have any good documents or examples I can follow?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Typically you'd make serverMessage and webSocketReady part of the React state so that when they are updated it triggers a component rerender. Use an useEffect hook to manage the socket instance.

Example:

import React, { useEffect, useState, useRef } from "react";

export default function MyTestComponent({ ...props }) {
  const [varThatNeedHooks, setVar] = useState({});
  const [serverMessage, setServerMessage] = useState("");
  const [webSocketReady, setWebSocketReady] = useState(false);

  const [webSocket, setWebSocket] = useState(new WebSocket("ws://127.0.0.1:3000/ws"));

  useEffect(() => {
    webSocket.onopen = (event) => {
      setWebSocketReady(true);
    };

    webSocket.onmessage = function (event) {
      setServerMessage(JSON.parse(event.data));
    };

    webSocket.onclose = function (event) {
      setWebSocketReady(false);
      setTimeout(() => {
        setWebSocket(new WebSocket("ws://127.0.0.1:3000/ws"));
      }, 1000);
    };

    webSocket.onerror = function (err) {
      console.log('Socket encountered error: ', err.message, 'Closing socket');
      setWebSocketReady(false);
      webSocket.close();
    };

    return () => {
       webSocket.close();
    };
  }, [webSocket]);

  if (!webSocketReady) {
    return <h1>Could not connect to server retrying ...</h1>;
  } else if (serverMessage == "") {
    return <h1>Waiting for message from server ...</h1>;
  } else {
    // do stuff with varThatNeedHooks
  }
}
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda