So entfernen Sie den neuen Firebase onAuthStateChanged-Listener in react

8

Ich implementiere firebase auth in einer react Web App mit react-router.

Ein Benutzer meldet sich an (entweder Facebook oder Google), indem er sich mit dem Pop-up-Zeichen anmeldet, und wenn er erfolgreich ist, route ich zur Haupt-App (/). In der Haupt-App-Komponente höre ich nach einer Änderung des Authentifizierungsstatus:

%Vor%

authListener überwacht die automatische Änderung:

%Vor%

Alles funktioniert gut, außer wenn ich mich abmelde (und zurück gehe / anmelde) und mich erneut über Facebook oder Google anmelde. Dann bekomme ich einen Fehler, der sagt:

  

Warnung: setState (...): Kann nur einen Mount oder Mounting aktualisieren   Komponente.

Ich vermute, dass der onAuthStateChanged-Listener von der jetzt nicht angehängten zuvor eingeloggten Status-App noch ausgeführt wird.

Gibt es eine Möglichkeit, den onAuthStateChanged-Listener zu entfernen, wenn die App-Komponente unmounten?

    
user2248331 26.06.2016, 12:02
quelle

2 Antworten

12

Alle Listener, die Sie eingerichtet haben, müssen ebenfalls entfernt werden.

Ihr Verdacht ist sehr vor Ort.

Sie sollten die Lebenszyklusmethode componentWillUnmount verwenden, um alle übrig gebliebenen Listener zu entfernen könnte deine App verschmutzen.

Um den Hörer zu klären, hier ist der relevante Code:

Innerhalb Ihrer authListener -Funktion müssen Sie einen Verweis auf den Listener in Ihrer Komponente speichern (er wird Ihnen als Ergebnis des Aufrufs von firebase.auth().onAuthStateChanged zurückgegeben). Es wird ein Hook sein, der den Listener ablehnt und ihn entfernt.

Speichern Sie den zurückgegebenen Wert also nicht einfach, sondern

%Vor%

Und wenn Ihre Komponente deinstalliert wird, verwenden Sie diesen Code:

%Vor%     
Elod Szopos 26.06.2016, 12:07
quelle
1

@Justin, weil onAuthStateChanged eine Funktion zurückgibt, mit der Sie den Listener löschen können ... this.fireBaseListener = firebase.auth().onAuthStateChanged

docs: Ссылка

  

Gibt nicht-null-fire base.Promise zurück, die nicht-null-Array von Zeichenfolge enthält

    
Mustafa K... 04.04.2018 17:59
quelle