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

114
Visualizações
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 à 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