2017-11-03 3 views
1

Zuerst überprüfe ich, ob Localstorage unterstützt wird, wenn dies der Fall ist, überprüfe ich, ob es eine Itemabfrage im lokalen Speicher gibt. Wenn es ein Element gibt, sollte es auf den Abfragestatus aktualisiert werden. Vor setState habe ich eine Warnung und es warnt den Artikel. Aber nach dem setState warne ich wieder, aber es zeigt nichts an? Jemand weiß warum? Selbst wenn ich this.setState({query: localStorage.getItem("query")}) durch this.setState({query: 'test'}) ersetze, zeigt es Test in der Warnung nicht an?Kann Daten in setState nicht speichern. React

getLocalStorage =() => { 
    if (typeof(Storage) !== "undefined") { 

     if (localStorage.getItem("query") !== null) { 
      //Alerts 'a string' 
      alert(localStorage.getItem("query")); 

      this.setState({ 
       query: localStorage.getItem("query") 
      }); 

      //Alerts nothing? 
      alert(this.state.query); 
      this.search(); 
     } 
     else{ 
      this.getLocation(); 
     } 
    } 
    else { 
     this.getLocation(); 
    } 
}; 

Antwort

6

setState wird keine direkte Veränderung zeigen es einige Zeit dauern wird:

setState() nicht immer sofort die Komponente aktualisieren. Es kann Batch oder verzögern das Update bis später. Dies macht das Lesen von this.state direkt nach dem Aufruf von setState() eine potentielle Falle. Verwenden Sie stattdessen componentDidUpdate oder einen setState-Rückruf (setState (Updater, Rückruf)), von denen beide garantiert ausgelöst werden, nachdem das Update angewendet wurde. Wenn Sie den Status basierend auf dem vorherigen -Status festlegen müssen, lesen Sie das folgende Updater-Argument.

Wenn Sie Zustandswert wollen nur, nachdem es festgelegt ist Sie es wie folgt verwenden:

this.setState({ 
    query: localStorage.getItem("query") 
},() => { 
    alert(this.state.query); 
}); 

Für weitere Details lesen Sie bitte setState

+0

Ah danke Ihnen sehr! – twoam

+1

@JustinTime, mein Vergnügen :) –