2017-09-25 35 views
-1

我正在使用實時財務數據,例如股票和貴金屬價格。我每隔幾秒就會打一個API來獲取給定資產的最新價格並將該價格存儲在狀態中。但是,我總是用一個數組或數組對象更新狀態,但是這個數據只是一個字符串。如果最新的GET請求返回與當前設置不同的值,則覆蓋該值。當狀態項不是集合時,SetState在React中的正確方法

我只是想知道什麼最佳做法是更新狀態中的簡單字符串?

我的狀態構造函數:

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

我的API請求:

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

如果成功抓取電話updateGoldPrice並將在返回的價格。

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

然後我看看它的價格每30秒:

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

我只是好奇,如果這是這樣做的好嗎方式。因爲一切我讀到說做這樣的事情:

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

但我不會存儲在陣列中的所有價格,我只想一個最新的價格。

謝謝。

回答

1

您正確地做這個。你的用戶界面只顯示最新的價格,這就是你所需要存儲的狀態。如果您不顯示歷史價格,則無需存儲歷史價格。

此外,在您的狀態this.setState({foo: "bar"})中存儲基元類型是完全沒問題的。

1

那麼你所指的最佳做法是永遠不要改變狀態!
在你的情況下,string是一個原始類型(原始值實際),因此默認情況下它已經是不可變的,所以不用擔心。
您需要從參考類型看像Array & Object

基本類型(如6的ES6):

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

根據反應文檔推薦的方法是使用反應庫中的setState方法..使用此方法。是由「setState({MyStateToModify:」new value「})。希望可以幫到你

相關問題