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

75
Visualizações
Reaccionar estilo de elemento de cambio representado con useState

Estoy trabajando en una aplicación de mensajería. Tengo un estado de uso que se llama 'mensajes' y muestra los mensajes de un determinado chat en la pantalla. Por ahora, cada vez que un usuario envía un mensaje, se agrega a los mensajes useState pero quiero que solo se agregue a los mensajes <div> . ¿Cómo puedo agregar un mensaje a los mensajes existentes sin cambiar el estado de uso?

Mi código de chat principal se parece a esto:

 import React, { useState } from 'react'; export default function Main() { const [messages, setMessages] = useState([]); const [message, setMessage] = useState(''); // Message Managment function chatInputPressed(e) { if ((e.key === 'Enter' || e.keyCode === 13) && message !== '') { // Check if the user pressed the Enter key setMessages(oldMsgs => ([message, ...oldMsgs])); // Insert the new message to the messages useState setMessage(''); // Set the message to empty } } return ( <div className='Main'> <div className='messages'> {messages.map(m => ( <div key='random-key' className='message' >{m}</div> ))} </div> <input type="text" id="message-input" value={ message } onChange={ (e) => setMessage(e.target.value) } onKeyDown={ chatInputPressed } > </input> </div> ); }

Quiero agregar un nuevo elemento de mensaje <div> a <div className='messages'> en lugar de actualizar los mensajes como este setMessages(oldMsgs => ([message, ...oldMsgs])); .

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puedes manejarlo como a continuación.

  1. Puede mantener una matriz de referencias para hacer referencia más tarde a cada elemento div del mensaje. Luego use el índice o ID de mensaje (cree uno único) para actualizar los estilos.
 const [messageRefs, setMessageRefs] = useState([]);
  1. cree y agregue una nueva ref para cada envío de mensaje.
 // Message Managment function chatInputPressed(e) { if ((e.key === "Enter" || e.keyCode === 13) && message !== "") { // Check if the user pressed the Enter key setMessageRefs((prev) => [createRef(null), ...prev]); setMessages((oldMsgs) => [message, ...oldMsgs]); // Insert the new message to the messages useState setMessage(""); // Set the message to empty } }
  1. Por ejemplo, si desea cambiar el color de un solo mensaje, defina un controlador como el siguiente. En su caso, será una devolución de llamada para la llamada API al backend.
 function styleMessage(index) { const mssageRef = messageRefs[index]?.current; mssageRef.style.color = "red"; }

Por ejemplo, he agregado esto como controlador de clics a cada mensaje para modificar el color.

Editar modest-cray-r6y3y6

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