Kann nicht anrufen, setState auf einer nicht gemounteten Komponente

Erhalte immer folgende Fehlermeldung Reagieren Nativen, wirklich nicht verstehen, wo es herkommt

Warnung: Kann nicht anrufen setState (oder forceUpdate) auf einer nicht gemounteten
Komponente. Dies ist ein no-op, aber es gibt ein memory leak in your
- Anwendung. Zu beheben, kündigen Sie alle Abonnements und asynchrone tasks
in der componentWillUnmount Methode.

Habe ich die folgende einfache Komponente:

class App extends React.Component {
    constructor(props) {
        super(props)
        this.state = {
            isLoggedIn: false,
        } 
    }

    componentDidMount(){
        this.fetchToken()
      }

    async fetchToken(){
        const access_token = await AsyncStorage.getItem('access_token')
        if (access_token !== null) {
           this.setState({ isLoggedIn: true })
        }
    }

    render() {
        const login = this.state.isLoggedIn
        if (login) {
            return <NavigatorLoggedIn />
        } else { 
            return <Navigator/>
        }
    }

}
  • Sie sollen zur Initialisierung der Staat innerhalb der Konstruktor, der nicht außerhalb. Und verwenden this.state, nicht nur state. Ich würde auch nicht gelten, die async Attribut zu Reagieren, die Standard-lifecycle-Methoden, am besten lassen, wie Sie sind. Erstellen Sie eine separate async/await Komponente Funktion um dies zu tun, dann rufen Sie es in componentDidMount
  • Danke für die Antwort! Aktualisiert die Komponente mit Ihren Anregungen. Original-Warnung ist immer noch da ;(
  • componentDidMount() läuft nach dem Rendern so aktualisierten Zustand nicht sichtbar/verfügbar in render(). Dann nehme ich diese Komponente wird ausgehängt, über render() in jedem Fall und so ruft fetchToken() nach der Tat verursacht einen Speicherverlust, pro den Fehler messgage.
  • dachte so an! irgendwelche Vorschläge für eine Lösung? Versucht eine Lösung zu finden, mich zu
  • aus der hand: (1) tun Sie es in render() an der Spitze. (2) im Konstruktor. In beiden Fällen verwenden Sie die andere form setState(), die es braucht, Funktion; weil setState() ist grundsätzlich asynchron
  • Möglich, Duplikat der Reagieren Warnung über setState im unmontierten Komponente

InformationsquelleAutor Marlow | 2018-06-09
Schreibe einen Kommentar