2017-09-25 1 views
-1

Ich arbeite mit Echtzeit-Finanzdaten wie Aktien und Edelmetallpreisen. Ich treffe alle paar Sekunden eine API, um den aktuellen Preis für ein bestimmtes Asset abzurufen und den Preis im Status zu speichern. Allerdings habe ich den Zustand immer mit einem Array oder Array von Objekten aktualisiert, aber diese Daten sind nur eine Zeichenfolge. Wenn die letzte GET-Anfrage einen anderen Wert als den aktuell eingestellten zurückgibt, überschreiben Sie den Wert.Korrekter Weg zum Setzen vonState in Reagieren, wenn Element im Status keine Sammlung ist

Ich frage mich nur, welche Best Practices für die Aktualisierung einer einfachen Zeichenfolge im Zustand sind?

mein Zustand Konstruktor:

this.state = { 
    goldPrice: '', 
    items: {} 
} 

Meine API-Anfrage:

fetchGoldPrice() { 
    jQuery.ajax({ 
    method: 'GET', 
    headers: {'Access-Control-Allow-Origin': '*'}, 
    url: Constants.API_URL, 
    success: (gold) => { 
     this.updateGoldPrice(gold.gold_bid_usd_toz); 
    } 
    }); 
} 

Wenn erfolgreich die Anrufe updateGoldPrice holen und geht im Preis, die zurückgegeben wurde.

updateGoldPrice(goldPrice) { 
    this.setState({ goldPrice: goldPrice }); 
} 

Und dann prüfe ich den Preis alle 30 Sekunden:

componentDidMount() { 
    this.fetchGoldPrice(); 
    this.timer = setInterval(
    () => this.fetchGoldPrice(), 30000); 
} 

Ich bin nur neugierig, ob dies eine Ordnung Weg, dies zu tun. Weil alles, was ich so gelesen, so etwas zu tun:

addItem(item) { 
    const items = {...this.state.items}; 
    items[item] = item; 
    this.setState({ items: items }); 
} 

Aber ich bin zu speichern nicht alle Preise in einem Array, ich will nur den einzigen aktuellen Preis.

Vielen Dank.

Antwort

1

Sie tun richtig dies. Ihre Benutzeroberfläche zeigt nur den letzten Preis an, so dass Sie alles in Ihrem Status speichern müssen. Sie müssen historische Preise nicht speichern, wenn Sie sie nicht anzeigen.

Darüber hinaus ist die Speicherung primitiver Typen in Ihrem Zustand this.setState({foo: "bar"}) völlig in Ordnung.

1

Nun die beste Praxis, auf die Sie sich beziehen, ist Ändern Sie niemals den Zustand!.
In Ihrem Fall ist string ein primitiver Typ (primitive Wert tatsächlich), daher ist es bereits standardmäßig unveränderlich, also keine Sorgen hier.
Sie müssen aus Referenztypen wie Array & Object herausschauen.

Primitive Types (6 ab ES6):

Boolean 
Null 
Undefined 
Number 
String 
Symbol (new in ECMAScript 6) 
0

Der empfohlene Weg gemäß der reaktiven Dokumentation ist die Verwendung der setState-Methode aus der react libray .. mit dieser Methode. ist durch "setState ({MyStateToModify:" neuer Wert "}). Hoffe das kann Ihnen helfen

Verwandte Themen