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

115
Vistas
Evite que se envíen varias solicitudes de recuperación no deseadas durante la re-renderización

Creé una aplicación de reacción usando react-hook-speech-to-text . Convierte la voz en texto y envía este texto a una base de datos mongodb a través de un servidor de nodo backend. Si un usuario dice "hola mundo", lo convertirá en una cadena y la almacenará en una matriz llamada resultados . Se suponía que la aplicación que construí enviaría cada cadena una vez a la base de datos, pero envía múltiples solicitudes de recuperación y llena la base de datos con copias innecesarias de la misma cadena. A continuación se muestra el código que he escrito en el archivo App.js. Quiero que solo envíe una solicitud de búsqueda por nueva cadena convertida a texto.

 import React from 'react'; import useSpeechToText from 'react-hook-speech-to-text'; export default function App() { const { error, interimResult, isRecording, results, startSpeechToText, stopSpeechToText, } = useSpeechToText({ continuous: true, useLegacyResults: false, }); if (error) return <p>Web Speech API is not available in this browser 🤷‍</p>; return ( <div className='min-h-screen flex justify-center items-center bg-indigo-400'> <div className='flex flex-col justify-center'> <h1 className='uppercase text-3xl bold text-white text-center'> Recording: {isRecording.toString()} </h1> <button className='bg-white text-indigo-400 px-4 py-2 rounded border-white border-2 transition hover:bg-indigo-400 hover:text-white' onClick={isRecording ? stopSpeechToText : startSpeechToText} > {isRecording ? 'Stop Recording' : 'Start Recording'} </button> <ul> {results.map((result) => { try { fetch('http://localhost:8000/api/commands', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ command: result.transcript }), }) .then((res) => res.json()) .then((myRes) => console.log(myRes)); } catch (error) { console.log('Error posting data: ' + error); } return <li key={result.timestamp}>{result.transcript}</li>; })} {interimResult && <li>{interimResult}</li>} </ul> </div> </div> ); }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Recomiendo crear un componente separado para un elemento de result . Allí puede agregar un gancho useEffect .

La dependencia de useEffect debería ser básicamente lo que haría necesaria una nueva recuperación si cambia , es decir, probablemente su result.transcript .

Eso es fácil si result.transcript es solo una cadena, entonces podría simplemente pasar la transcript al componente, colocarla en las dependencias y los parámetros de obtención.

El resultado de la recuperación debe devolverse mediante algún tipo de devolución de llamada en lugar de simplemente devolverse.

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