簡體   English   中英

當狀態項不是集合時,在React中設置狀態的正確方法

[英]Correct way to setState in React when item in state is not a collection

我正在處理股票和貴金屬價格等實時財務數據。 我每隔幾秒鍾就會命中一次API,以獲取給定資產的最新價格並將該價格存儲在狀態中。 但是,我總是用一個數組或對象數組更新狀態,但是此數據只是一個字符串。 如果最新的GET請求返回的值不同於當前設置的值,則覆蓋該值。

我只是想知道更新狀態中的簡單字符串的最佳實踐是什么?

我的狀態構造函數:

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 });
}

但是我沒有將所有價格存儲在一個數組中,我只想要一個最新價格。

謝謝。

那么,您指的最佳實踐是永不改變狀態!
在您的情況下, string是原始類型(實際上是原始值),因此默認情況下它已經是不可變的,因此在此無需擔心。
您需要注意諸如ArrayObject引用類型。

基本類型(截至ES6 6種):

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

您正在正確執行此操作。 您的用戶界面僅顯示最新價格,因此您只需要在該州存儲即可。 如果您不顯示歷史價格,則無需存儲它們。

此外,在您的狀態下存儲基本類型this.setState({foo: "bar"})完全可以。

根據react文檔的推薦方法是使用react libray中的setState方法。 是通過“ setState({MyStateToModify:“新值”}})。希望對您有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM