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

259
Vistas
No se puede eliminar el oyente de Firestore dentro de una función

Mi ejemplo de código se parece a lo siguiente:

 useEffect(() => { specialfunction();//listener for chat operations }, []); const specialfunction = async() => { var mylistener = firebase.firestore()...onSnapshot((snapshot) => { //do something with the docs retrieved }); //my unlucky try to remove the listener after I leave the screen return () => { try{ mylistener(); console.log("LISTENER REMOVED") }catch(error){console.log(error)}; } };

Por lo general, si desea eliminar un oyente de Firestore, simplemente llame a la variable a la que lo adjuntó, en mi ejemplo, 'mylistener ()'. Desafortunadamente, mi oyente no se detiene. Después de salir de la pantalla y volver a entrar varias veces y recibir un documento, noto que mi oyente dispara varias veces. Tampoco puedo detenerlo fuera de mi 'función especial' porque no es un oyente de base de datos donde solo puedo llamar a la referencia nuevamente y detenerlo, se trata de un oyente de Firestore aquí.

Tampoco puedo poner 'mylistener' fuera de la 'función especial', debe permanecer dentro.

¿Pueden ayudarme a detener 'mylistener' después de salir de la pantalla?

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

0

No estoy particularmente bien versado en firebase pero si desea eliminar el detector de eventos cuando se trata del gancho useEffect , la plantilla debería ser la siguiente

 useEffect(() => { window.addEventListener("keyup", handleKeyUp) return () => window.removeEventListener("keyup", handleKeyUp) }, [collapsed, handleKeyUp])

Tenga en cuenta que en su gancho useEffect necesita return una función que elimine el detector de eventos

about 4 years ago · Juan Pablo Isaza Denunciar

0

La clave para esta solución fue otra publicación pero bajo un tema diferente . Es importante entender que debe predefinir una variable y luego sobrescribirla con el oyente de Firestore. En este caso, podrá separar el oyente en la parte de retorno del 'useEffect'-Hook una vez que salga de la pantalla, el código se ve así ahora:

 let mylistener; useEffect(() => { specialfunction();//listener for chat operations return () => { try{ mylistener(); //here you need to remove the listener console.log("LISTENER REMOVED") }catch(error){console.log(error)}; } }, []); const specialfunction = async() => { var mylistener = firebase.firestore()...onSnapshot((snapshot) => { //do something with the docs retrieved }); };

Además, la 'función especial' no necesita ser asíncrona, pero hago llamadas asíncronas dentro de esta función, depende de usted.

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