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

103
Vistas
No se puede acceder al estado - React.js trabajando con Websocket

Esta es mi primera publicación aquí, es un placer conocerlos a todos. Recientemente comencé mi aventura con React, por lo que mi pregunta probablemente no será muy desafiante (también podría ser algo muy básico), sin embargo, me quedé atascado con este problema por un tiempo.

Así que estoy trabajando con WebSocket que, cuando está conectado, envía un mensaje único con todos los productos actualmente en stock. Luego, cada pocos segundos, envía un objeto con la actualización de los cambios en el stock del producto.

Logré actualizar el estado con el primer mensaje recibido, pero luego, cuando intento acceder al estado en una función handleData, el estado es una matriz vacía. Esto sucede a pesar del hecho de que los datos representados en la página usando el estado todavía están visibles, el estado es visible en Firefox Developer Edition React DevTools, y el efecto de uso que está asociado con el cambio de estado se activa solo una vez, al principio, por lo que no No cambiar.

Quiero poder acceder a los datos que puse antes en el estado, en la función handleData, para poder actualizar el estado con los cambios de stock. Es interesante que cuando el websocket se vuelve a cargar, la variable de estado "productos" se amplía con los productos descargados anteriores.

Aquí está el código de mi componente:

 import React, { useState, useEffect, useRef } from 'react'; import Product from './Product'; export default function ProductsList() { const [products, setProducts] = useState([]); const ws = useRef(null); useEffect(() => { ws.current = new WebSocket(<HERE IS WEBSOCKET URL BUT I CENSORED IT>); ws.current.onmessage = (message) => handleData(message); return () => ws.current.close(); },[]); useEffect(() => { console.log("Products useEffect:", products) }, [products]) //prints fine here const handleData = (message) => { const data = JSON.parse(message.data); switch (data.operation) { case 'product.stock.decreased': { console.log("Products Switch:", products) // prints empty array here break; } default: { setProducts(prevState => [...prevState, ...data]) // here state updates break; } } } return ( <div className="ProductsList"> {products.map(p => <Product key={p.productId} productId={p.productId} name={p.name} price={p.price} stock={p.stock} />)} </div> ); }

Muchas gracias de antemano por su ayuda.

about 4 years ago · Juan Pablo Isaza
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