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

165
Vistas
Reaccionar: FileReader onloadend no reconoce "esto" si se define en un método de componente

Defino un método en un componente de clase React de la siguiente manera

 onSaveAudio = (e) => { e.preventDefault(); const { audioBlob } = this.state; let reader = new FileReader(); reader.onloadend = function () { const base64 = reader.result; const bstr = base64.split(',')[1]; console.log(bstr); console.log('this.props', this.props); this.props.onSaveAudio(bstr); } reader.readAsDataURL(audioBlob); }

En la línea console.log('this.props', this.props) , está imprimiendo "indefinido"; en la línea this.props.onSaveAudio , se genera un error:

TypeError no capturado: no se puede leer la propiedad 'onSaveAudio' de undefined en FileReader.reader.onloadend (recorder.js:300)

Tengo entendido que "onloadend" se activa después de que el "lector" termine de leer "audioBlob". Necesito llamar a this.props.onSaveAudio en la función "onloadend", porque si lo llamo fuera de "onloadend", no puedo programar la llamada después de que termine la lectura y "reader.result" esté listo, y "bstr" se resolvería como indefinido con el tiempo incorrecto; pero si llamo a this.props.onSaveAudio dentro de "onloadend", entonces "this" no se reconoce. Parece ser un dilema.

Supongo que necesito una solución para enlazar "esto" dentro de "onloadend", o poder cronometrar de alguna manera una llamada this.props.onSaveAudio fuera de la función "onloadend", después de que la función "onloadend" termine de ejecutarse.

¿Algún consejo?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Una forma que encontré es usar una función de flecha al definir "reader.onloadend".

 reader.onloadend = () => { const base64 = reader.result; const bstr = base64.split(',')[1]; console.log(bstr); console.log('this.props', this.props); this.props.onSaveAudio(bstr); }

this.props se definirá en este caso

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