簡體   English   中英

如何使用反應 useState 鈎子防止競爭條件

[英]How to prevent race conditions with react useState hook

我有一個組件,它使用鈎子狀態 (useState) api 來跟蹤數據。

對象看起來像這樣

const [data,setData] =  React.useState({})

現在我有多個按鈕可以發出 API 請求並使用新密鑰設置數據

setAPIData = (key,APIdata) => {

    const dup = {
      ...data,
      [key]:APIdata
    }
    setData(dup)
}

現在,如果我同時發出多個請求,則會導致競爭條件,因為在 react 中設置狀態是異步的,並且我獲得了先前的值。

在基於類的組件中,我們可以通過一個 updater 函數來獲取更新的值,這個基於鈎子的組件是如何做的。

您必須使用帶有函數的 setData 作為其參數。 那么它總是會得到之前的狀態,不管它會以什么順序被調用。

  setAPIData = (key, APIdata) => {
    setData(prevData => ({
      ...prevData,
      [key]: APIdata
    }));
  };

暫無
暫無

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

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