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

178
Vistas
¿Por qué no puedo acceder al estado cuando lo configuro en useEffect React?

Cuando el componente se procesa, envío un socket emit con socket io para obtener datos dentro de useEffect, también escucho para obtener los datos. Cuando recupero los datos del socket, actualizo el estado y luego llamo a una función. Dentro de la función el estado está vacío. ¿Por qué el estado está vacío?

 const [chatData, setChatData] = useState([]); const handleData = () => { console.log(chatData) } useEffect(() => { socket.emit("chatData"); socket.on("chatData", (data) => { setChatData(data) handleData(); }); return () => { socket.off("chatData"); }; }, []);
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En este caso, React no puede prometerle que actualizará el estado de inmediato. Sin embargo, puede pasar funciones a setChatData para configurar los datos (en los que puede llamar a su función) en lugar del valor. Por ejemplo:

 socket.on("chatData", (data) => { setChatData(() => { handleData(data); return data; }; });

O como alguien dijo en los comentarios, puede usar otro gancho useEffect con chatData como dependencia.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar useMemo o useEffect para detectar nuevos cambios de estado. Por lo tanto, si necesita ejecutar una función después de cambiar el estado y evitar la ejecución repetida de un programa, le recomiendo esto.

En este caso, no necesita handleData . Entonces puede usar otro useEffect para detectar cambios. Como esto:

 const [chatData, setChatData] = useState([]); useEffect(() => { console.log(chatData) },[chatData]) useEffect(() => { socket.emit("chatData"); socket.on("chatData", (data) => { setChatData(data) }); return () => { socket.off("chatData"); }; }, []);
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