Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

137
Vistas
Reaccionar: cargue objetos con una llamada REST y anteponga nuevos eventos de WebSocket

Quiero implementar una funcionalidad que cargaría una lista de objetos de una llamada REST cuando la página se carga por primera vez y luego consumiría nuevos objetos de los eventos de WebSocket y los actualizaría/agregaría correspondientemente.

 const [objects, setObjects] = useState([]) useEffect(() => { axios.get(`${process.env.REACT_APP_REST_API}/objects`) .then(resp => setObjects(resp.data)) }, []) const ws = new WebSocket(`${process.env.REACT_APP_WS_API}/objects`) ws.onmessage = (event) => { const obj = JSON.parse(event.data) const items = [...objects] const index = items.findIndex((it) => it.id === obj.id) if (index === -1) { items.push(obj) } else { items[index] = obj } setObjects(items) };

Este código no funciona. Abre conexiones WS varias veces. También los datos iniciales desaparecen de vez en cuando y solo se muestra el último objeto. Entiendo que está relacionado con el hecho de que reaccionar vuelve a renderizar el componente. Y el problema con los elementos que desaparecen probablemente esté relacionado con el alcance del cierre utilizado en el controlador WS. Al mismo tiempo, no tengo idea de cómo resolverlo en React.

P: ¿Cómo puedo precargar elementos con una llamada REST y seguir actualizándolos consumiendo más eventos de WebSocket en un componente React?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

  • Intente poner la creación de ws en useEffect.
  • UseState con matrices es diferente.
  • Si lo desea, use return on useEffect para cerrar ws cuando se desmonte el componente.
 const [objects, setObjects] = useState([]) useEffect(() => { axios.get(`${process.env.REACT_APP_REST_API}/objects`) .then(resp => setObjects(resp.data)); const ws = new WebSocket(`${process.env.REACT_APP_WS_API}/objects`) ws.onmessage = (event) => { const obj = JSON.parse(event.data) const index = objects.findIndex((it) => it.id === obj.id) if (index === -1) { setObjects((current)=>[...current, obj]); } else { items[index] = obj setObjects((current)=> current[index]= obj); } }; return () => { ws.close(); } }, [])
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda