private loadData(): void { const q = query(collection(this.store, 'users'), orderBy('userName')); this.unsubscribe = onSnapshot(q, p => { let users: any[] = []; p.forEach(x => { users.push(x.data()); }); this.usersDataSource = users; }); }En el método anterior, se crea un oyente y se puede eliminar llamando al oyente:
this.unsubscribe();En la misma página/componente, si se llama a este método varias veces, ¿Firebase crea un nuevo oyente cada vez? En caso afirmativo, ¿cuál es la mejor manera de eliminar a todos esos oyentes?
Parece que su pregunta es sobre tener que eliminar cada oyente que registre, lo que de hecho tiene que hacer.
Si bien el SDK puede deduplicar los oyentes en el backend (es posible, pero en realidad no lo he comprobado por un tiempo), eso no está relacionado con la API expuesta: la cantidad de llamadas para suscribir a un oyente debe equilibrarse con la cantidad de llamadas para cancelar la suscripción antes de que el SDK deje de escuchar los cambios en el servidor.
Por lo general, mantengo una lista de métodos de cancelación de suscripción para cada ámbito de mi aplicación que necesito para cancelar la suscripción cuando cambia el ámbito. Entonces, por ejemplo, si tengo una aplicación React, hago esto por componente. En otros marcos, la lógica de cambio de ruta suele ser un buen lugar para dar de baja a los oyentes de la ruta anterior.