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

溫馨提示×

溫馨提示×

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

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

前端知識 |淺談React setState

發布時間:2020-05-22 08:57:46 來源:網絡 閱讀:832 作者:海說軟件 欄目:web開發

setState的連鎖反應

前端知識 |淺談React setState
這是一個React組件實現組件可交互所需的流程,render()輸出虛擬DOM,虛擬DOM轉為DOM,再在DOM上注冊事件,事件觸發setState()修改數據,在每次調用setState方法時,React會自動執行render方法來更新虛擬DOM,如果組件已經被渲染,那么還會更新DOM中去。這個過程,setState就像一個點燃引擎的火源,發動了React核心的調度層,然后直至渲染層的改變。
異步的setState
剛接觸React的同學,對React的setState的使用偶爾會有一些偏頗,出現一些意料之外的情況。例如:
onFunction=()=>{
this.setState({value: []});
// 此刻立馬取this.state做一些同步操作
console.log(this.state.value);

所以經常犯這個錯的同學需要謹記下面這幾點:

  1. setState是異步的,不會立即改變state的值。
  2. 多次setState調用生成的效果會合并。
  3. 第二個參數可以是一個回調函數。
  4. setState可以接受一個函數
    為什么要異步呢?
    前端知識 |淺談React setState
    每一次setState如果都引發一次組件更新,走完一圈生命周期,實在是有點粗糙和浪費,生命周期函數為純函數性能應當還能夠接受,可是render函數內返回的虛擬DOM去做比較這個就比較費時間了。
    直觀的感受是,React將多個setState產生的修改放在一個隊列里,緩一緩,攢在一起,等待時機,覺得差不多了再引發一次更新過程。這樣,在每次更新過程中,會把積攢的setState結果合并,做一個merge的動作,節省render觸發的頻率。
    這樣,對于開發者而言,可以在同步代碼中隨意多行調用setState函數而不用擔心重復setState重復render的問題。
    然后,總是被大家誤用不理解的也是這一點,所以后來,setState方法的第二個參數慢慢被進入大家的視野了,作為回調函數可以再次拿到新的this.state值。
    再后來,一個setState函數的隱藏功能進入了大家的視野,那就是setState可以接受一個函數作為參數。
    this.setState(function (state, props) {
    return {
    value: state.value - 1
    }
    });
向AI問一下細節

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

AI

靖江市| 读书| 四川省| 河南省| 仁寿县| 盖州市| 云霄县| 宜黄县| 奈曼旗| 乌鲁木齐市| 盐津县| 咸丰县| 辽宁省| 富民县| 沂水县| 萨嘎县| 额尔古纳市| 文昌市| 中超| 长岛县| 额敏县| 河北省| 铁岭市| 政和县| 新昌县| 阳城县| 同心县| 麻城市| 太和县| 遵化市| 武隆县| 桂平市| 密山市| 通渭县| 内黄县| 太谷县| 青田县| 仁寿县| 旅游| 松江区| 龙州县|