ComponentWillUnmount () wird beim Aktualisieren der aktuellen Seite nicht aufgerufen

9

Ich habe dieses Problem, bei dem mein Code in der componentDidMount() -Methode beim Aktualisieren der aktuellen Seite (und anschließend der Komponente) nicht ordnungsgemäß ausgelöst wurde. Es funktioniert jedoch einwandfrei, wenn Sie nur durch Klicken auf die Links navigieren und durch meine Website navigieren. Aktualisieren Sie die aktuelle Seite? Keine Chance.

Ich habe festgestellt, dass das Problem darin besteht, dass componentWillUnmount() nicht ausgelöst wird, wenn ich die Seite aktualisiere und die Feinklick-Links auslöst und meine Website / App navigiert.

Die Auslösung von componentWillUnmount() ist für meine App entscheidend, da die Daten, die ich in der componentDidMount() -Methode lade und verarbeite, sehr wichtig sind, um Informationen für Benutzer anzuzeigen.

Ich brauche componentWillUnmount() , um beim Aktualisieren der Seite aufgerufen zu werden, weil ich in meiner Funktion componentWillMount() (die nach jeder Aktualisierung neu gerendert werden muss) eine einfache Filterung durchführe und diese Variable in einem Zustandswert abspeichere, der benötigt wird in der Statusvariable logos vorhanden sein, damit der Rest der Komponente funktioniert. Dies ändert sich nicht oder erhält während des Lebenszyklus der Komponente zu keinem Zeitpunkt neue Werte.

%Vor%

Klippen:

  • Ich mache eine DB-Filterung in componentWillMount() method
  • Muss nach der Aktualisierung in der Komponente vorhanden sein
  • Aber ich habe ein Problem, bei dem componentWillUnmount() nicht ausgelöst wird, wenn die Seite aktualisiert wird
  • Brauchen Sie Hilfe
  • Bitte
Mabeh Al-Zuq Yadeek 22.08.2016, 16:57
quelle

3 Antworten

17

Wenn die Seite aktualisiert wird, hat sie nicht die Möglichkeit, die Komponenten wie üblich zu deaktivieren. Verwenden Sie das window.onbeforeunload -Ereignis, um einen Handler für die Aktualisierung festzulegen (lesen Sie die Kommentare im Code):

%Vor%     
Ori Drori 22.08.2016 17:06
quelle
4

Ich habe auch auf dieses Problem gestoßen und festgestellt, dass ich sicherstellen musste, dass mindestens zwei Komponenten immer ordnungsgemäß aushängen. Also habe ich eine High-Order-Komponente erstellt, die sicherstellt, dass die umhüllte Komponente immer ausgehängt wird

%Vor%

Hinweis : Wenn Sie wie ich Turbolinks und Rails verwenden, möchten Sie vielleicht die beiden Ereignisse beforeunload und turbolinks:before-render aktivieren.

    
Dorian 08.08.2017 23:04
quelle
0

Ich sehe, dass diese Frage mehr als tausend Ansichten hat, also werde ich erklären, wie ich dieses Problem gelöst habe:

Um dieses spezielle Problem zu lösen, ist es am sinnvollsten, eine Komponente auf oberer Ebene zu erstellen, die Ihr Abonnement oder Ihre Datenbank lädt, sodass Sie die erforderlichen Daten laden, bevor Sie sie an Ihre untergeordnete Komponente übergeben %Code%. Außerdem können Sie die Berechnungen in der Komponente der oberen Ebene ausführen und sie einfach als Requisiten übergeben, die in Ihrer empfangenden Komponente verwendet werden sollen

Zum Beispiel:

%Vor%

Im obigen Beispiel verwende ich den reaktiven Container von Meteor, um meine MongoDB-Daten abzurufen und darauf zu warten, dass die Anmeldung vollständig abgeschlossen ist, bevor ich die untergeordnete Komponente rende und mir die gewünschten Requisiten übergebe. Wenn Sie alle Ihre Daten in die Komponente auf höherer Ebene laden, müssen Sie sich nicht darauf verlassen, dass die Methode componentWillMount() nach jeder Aktualisierung ausgelöst wird. Die Daten sind in der übergeordneten Komponente bereit, sodass Sie sie in der untergeordneten Komponente beliebig verwenden können.

    
Mabeh Al-Zuq Yadeek 20.04.2017 21:33
quelle

Tags und Links