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

183
Vistas
Cómo recorrer una matriz de actualización en reaccionar

Estoy tratando de practicar socket.io con React.js , así que estoy tratando de enviar mensajes entre dos clientes, sin embargo, tengo problemas para mostrar los mensajes. Quiero mostrar los últimos mensajes enviados. Ahora estaba pensando en hacerlo como una matriz porque un estado no funcionaba. Cuando la consola registra la matriz, aparece en la consola pero nunca se muestra

 import { useEffect, useState } from "react"; import io from "socket.io-client"; import "./App.css"; let socket; const CONNECTION_PORT = "localhost:3001/"; function App() { const [loggedIn, setLoggedIn] = useState(false); const [room, setRoom] = useState(""); const [userName, setUserName] = useState(""); const [message, setMessage] = useState(""); var itemArray = []; useEffect(() => { //connect to the socket socket = io(CONNECTION_PORT); socket.on("receive-message", (data) => { itemArray.push(data); console.log("Pong"); console.log(itemArray); }); //receiving messages socket.on("authentication", (bool) => { if (bool === true) { setLoggedIn(true); } }); }, [CONNECTION_PORT]); //Sending a request to join the room const connectToRoom = () => { socket.emit("join-room", room, userName); }; const sendMessage = () => { socket.emit("send-message", message); }; return ( <div className="App"> {!loggedIn ? ( <div className="login"> <input type="text" placeholder="Name..." onChange={(e) => { setUserName(e.target.value); }} /> <input type="text" placeholder="Room..." onChange={(e) => { setRoom(e.target.value); }} /> <button onClick={connectToRoom}> Enter Chat</button> </div> ) : ( <div> <input type="text" placeholder="Send Message..." onChange={(e) => { setMessage(e.target.value); }} /> <button onClick={sendMessage}>Send Message</button> <div> {itemArray.map((data) => { console.log(data); })} </div> </div> )} </div> ); } export default App;
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

La matriz se está actualizando, pero no hay nada que decirle a React que renderice la actualización. Cualquiera de estos cambios hará que el componente se vuelva a renderizar:

  1. Actualizar a los accesorios
  2. Actualizar al estado
  3. Cambios de valor de contexto

React DOM compara el elemento y sus elementos secundarios con el anterior, y solo aplica las actualizaciones de DOM necesarias para llevar el DOM al estado deseado.

Está actualizando una variable de matriz dentro del componente, pero esto no activará un procesamiento. Mueva la matriz al estado:

 const [messages, setMessages] = useState([]); ... useEffect(() => { ... socket.on("receive-message", (data) => { // update the state which triggers a render setMessages(prevState => [...prevState, data]); }); }, [CONNECTION_PORT]);
about 4 years ago · Juan Pablo Isaza Denunciar

0

Debe devolver los datos para verlos. El mapa devuelve cada valor que atraviesa, por lo que debe asegurarse de decir que desea ver los datos como en una lista. Asegúrese de regresar así.

Función de mapa interior

 {itemArray.map((data) => { return<li>{data.propertyName}</li> })}

Aquí propiedad será cualquier cosa de una propiedad de objeto

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