91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

react的setstate同步情況是什么

發布時間:2023-01-06 11:24:47 來源:億速云 閱讀:95 作者:iii 欄目:web開發

本文小編為大家詳細介紹“react的setstate同步情況是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“react的setstate同步情況是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

react的setstate在原生事件和setTimeout中都是“同步”的,而在合成事件和鉤子函數中是“異步”的;在React中,如果是由React引發的事件處理,調用setState不會同步更新“this.state”,除此之外的setState調用會同步執行“this.state”。

react的setstate什么時候同步?什么時候是異步的?

先給出答案:

有時表現出異步,有時表現出同步。

setState只在合成事件和鉤子函數中是“異步”的,在原生事件和setTimeout 中都是同步的。

class Example extends React.Component {
  constructor() {
    super();
    this.state = {
      val: 0
    };
  }
  
  componentDidMount() {
    this.setState({val: this.state.val + 1});
    console.log(this.state.val);    // 第 1 次 log
    this.setState({val: this.state.val + 1});
    console.log(this.state.val);    // 第 2 次 log
    setTimeout(() => {
      this.setState({val: this.state.val + 1});
      console.log(this.state.val);  // 第 3 次 log
      this.setState({val: this.state.val + 1});
      console.log(this.state.val);  // 第 4 次 log
    }, 0);
  }
  render() {
    return null;
  }
};

1.setState只在合成事件和鉤子函數中是“異步”的,在原生事件和setTimeout 中都是同步的。

2.setState 的“異步”并不是說內部由異步代碼實現,其實本身執行的過程和代碼都是同步的,只是合成事件和鉤子函數的調用順序在更新之前,

導致在合成事件和鉤子函數中沒法立馬拿到更新后的值,形成了所謂的“異步”,當然可以通過第二個參數 setState(partialState, callback) 中的callback拿到更新后的結果。

3.setState 的批量更新優化也是建立在“異步”(合成事件、鉤子函數)之上的,在原生事件和setTimeout 中不會批量更新,

在“異步”中如果對同一個值進行多次setState,setState的批量更新策略會對其進行覆蓋,取最后一次的執行,如果是同時setState多個不同的值,在更新時會對其進行合并批量更新。

在React中,如果是由React引發的事件處理(比如通過onClick引發的事件處理),調用setState不會同步更新this.state,除此之外的setState調用會同步執行this.state。所謂“除此之外”,指的是繞過React通過addEventListener直接添加的事件處理函數,還有通過setTimeout/setInterval產生的異步調用。

原因:

在React的setState函數實現中,會根據一個變量isBatchingUpdates判斷是直接更新this.state還是放到隊列中回頭再說,而isBatchingUpdates默認是false,也就表示setState會同步更新this.state,但是,有一個函數batchedUpdates,這個函數會把isBatchingUpdates修改為true,而當React在調用事件處理函數之前就會調用這個batchedUpdates,造成的后果,就是由React控制的事件處理過程setState不會同步更新this.state。

讀到這里,這篇“react的setstate同步情況是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

瑞安市| 湛江市| 凌云县| 天气| 河间市| 邻水| 南充市| 兰州市| 三河市| 永康市| 文昌市| 葵青区| 库尔勒市| 许昌市| 宁河县| 张家口市| 衡东县| 米易县| 景谷| 嘉定区| 桃江县| 江陵县| 西藏| 平定县| 崇义县| 阳信县| 鹤壁市| 繁峙县| 深水埗区| 秦安县| 荆门市| 九寨沟县| 宾阳县| 隆化县| 汉源县| 卢湾区| 昌江| 肇州县| 西和县| 丰镇市| 夏河县|