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

186
Visualizações
Reaccionar, ¿cómo hago un seguimiento de que el usuario ha dejado de escribir en la entrada?

Tengo un componente tan funcional. Cuando un usuario ingresa una entrada, envío un mensaje al servidor y envío a otros usuarios lo que alguien escribe. Aquí está el código:

 const ChatInput = (props) => { const [message, setMessage] = useState(''); const typingMessage = () =>{ socket.emit('typing',props.username); } return ( <div className> <Input value = {message} onChange = { (e) => typingMessage(e.target.value) } placeholder="Type a message here" /> <Button onClick={sendMessage} icon={<SendOutlined /> }/> </div> ); };

¿Cómo hago un seguimiento de que el usuario ha dejado de escribir? ¿Si no ingresa nada en la entrada durante más de 10 segundos?

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

0

Necesita la función de rebote, que contará 10 segundos (puede ser un tiempo diferente, depende de usted) después de la última entrada (disparador onChange)

 function debounce(func, timeout = 10000){ let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => { func.apply(this, args); }, timeout); }; } function saveInput(){ console.log('User has stopped writting 10 sec ago'); } const processChange = debounce(() => saveInput()); const typingMessage = () =>{ socket.emit('typing',props.username); processChange() }
about 4 years ago · Juan Pablo Isaza Relatório

0

Puede usar una combinación de onFocus , onBlur y onMouseLeave , de tal manera que cuando ocurre onFocus , él está escribiendo, cuando ocurre onBlur , ya no está escribiendo, y cuando ocurre onMouseLeave o cuando hace clic en enviar, usted onBlur tú mismo. Como abajo:

Supuse que su componente de Input puede reenviar ref . Si no, hazlo siguiendo las referencias de reenvío .

 const ChatInput = (props) => { const [message, setMessage] = useState(""); const inputRef = useRef(); const typingMessage = () => { socket.emit("typing", props.username); }; const notTypingMessage = () => { socket.emit("typing", ""); }; return ( <div className> <Input ref={inputRef} value={message} onChange={(e) => setMessage(e.target.value)} onFocus={() => typingMessage()} onBlur={() => notTypingMessage()} onMouseLeave={() => inputRef?.current.blur()} placeholder="Type a message here" /> <Button onClick={()=>{sendMessage(); inputRef?.current.blur()}} icon={<SendOutlined />} /> </div> ); }; export default ChatInput;
about 4 years ago · Juan Pablo Isaza Relatório

0

  • Esta es una solución que espera un segundo después de terminar de escribir y emite stoppedTyping evento de escritura detenida.
  • es posible que aún desee optimizarlo de acuerdo con las necesidades de sus aplicaciones
 const emit = (action, data) => { console.log(action, data) } function App() { const props = { username: 'me' } const [message, setMessage] = useState(''); const [isTyping, setIsTyping] = useState(false); useEffect(() => { if (message && !isTyping) { emit('stoppedTyping', props.username) } }, [isTyping]) const typingMessage = (v) => { emit('typing', props.username); setMessage(v) } const sendMessage = (e) => { console.log(e) } return ( <div className=''> <input value={message} onKeyDown={() => !isTyping && setIsTyping(true)} onKeyUp={() => { setTimeout(() => { setIsTyping((t) => t ? false : t) }, 1000) }} onChange={ (e) => typingMessage(e.target.value) } placeholder="Type a message here" /> <button onClick={sendMessage} >send</button> <pre>{ JSON.stringify({ message, isTyping }) }</pre> </div> ); }
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