2016-12-14 5 views
1

Ich habe eine React/Redux/Firebase-App und ich muss den Benutzernamen des aktuellen Benutzers vor der Render-Methode überprüfen, damit ich weiß, ob ich zur db gehen und einen anderen Benutzer abrufen muss.Wie kann ich auf den aktuellen React/Redux-Benutzer außerhalb der Rendermethode zugreifen?

jedoch aus irgendeinem Grund bin ich nicht klar, kann ich auf nicht this.props.currentUser außerhalb des Verfahrens machen. Es gibt null zurück.

Grundsätzlich möchte ich dies innerhalb einer Funktion zugreifen. Mein Code sieht wie folgt aus:

componentDidMount() { 
    var userURL = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); 

    if(this.props.currentUser.username !== userURL) { 
    this.getDbUser(userURL); 
    console.log(userURL); 
    } 
} 

Ich erhalte eine Fehler

Cannot read property username of null 

ich, dass die Daten in Ordnung in render() zugreifen können. Irgendeine Idee, wie man das beheben könnte, wäre großartig. Vielen Dank!

+0

Chancen sind Ihre Render-Methode läuft zweimal und auf dem zweiten Durchlauf wird der Benutzer definiert. Deshalb funktioniert es in render – corvid

+0

Danke, Render läuft in der Tat zweimal, nicht sicher warum. Ich rufe eine fetchUser-Methode im Konstruktor auf, sollte sie also nicht auf der ganzen Linie verfügbar sein? –

+0

nicht, wenn es async ist – corvid

Antwort

1

EDIT: Eigentlich - ComponentDidMount wird ausgeführt, bevor Ihre asynchrone 'fetch' zurückgibt, daher der aktuelleUser wird null sein. Versuchen Sie, ComponentDidMount zu ComponentWillReceiveProps(nextProps) zu ändern und "this.props" in Ihrem Code durch "next.props" zu ersetzen.

Alles innerhalb von ComponentWillReceiveProps läuft die einmal Ihre Requisiten aktualisiert werden mit dem ‚geholt‘ user. Zum Beispiel:

componentWillReceiveProps(nextProps) { 
    var userURL = window.location.pathname.replace(/^\/([^\/]*).*$/, '$1'); 

    if(nextProps.currentUser && nextProps.currentUser.username !== userURL) { 
    this.getDbUser(userURL); 
    console.log(userURL); 
    } 
} 

Der obige Code enthält auch && in der IF so wird es keinen Fehler sein, wenn die current null ist.

Dokumentation: https://facebook.github.io/react/docs/react-component.html#componentwillreceiveprops

+0

Nizza! das scheint zu funktionieren. Danke Shane! –

Verwandte Themen