最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React中setState的使用與同步異步的使用

 更新時間:2021年03月15日 09:42:07   作者:一顆冰淇淋  
這篇文章主要介紹了React中setState的使用與同步異步的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

在react中,修改狀態(tài)如果直接使用this.state,不會引起組件的重新渲染,需要通過 this.setState來對組件的屬性進行修改。

1、this.setState的兩種定義方式

定義初始狀態(tài)

state = { count: 0 },

如果此時有一個按鈕,點擊按鈕讓計數(shù)加1,我們可以有兩種寫法

(1)傳遞對象

this.setState({ count: this.state.count + 1})

(2)傳遞函數(shù)

this.setState((state, props) => ({ count: count + 1}))

2、setState的兩種方式有什么不同?

如果變更的state的值需要依賴于上一次的state的值,這種情況就需要用到函數(shù)的形式,比如以下這種情況

addCount(){
  this.setState({ count: this.state.count + 1})
  this.setState({ count: this.state.count + 1})
  this.setState({ count: this.state.count + 1})
}

此時只會執(zhí)行一次+1的操作,因為在React內部,會將多次setState合并操作,新的state由 Object.assgin({}, {count: 0},  { count: 1}) 合并所得,以上賦值會執(zhí)行三次,但因為count的值沒有更新,所以最終執(zhí)行的結果只+1,如果setState的賦值是函數(shù),那情況就不一樣了

addCount(){
  this.setState((state, props) => ({ count: count + 1}))
  this.setState((state, props) => ({ count: count + 1}))
  this.setState((state, props) => ({ count: count + 1}))
}

這樣的操作會得到+3的效果,因為React會進行判斷,如果傳入的是函數(shù),那么將執(zhí)行此函數(shù),此時count的值就已經被修改了

3、setState是同步還是異步的?

☆☆☆☆☆ 是異步的

(1) 即我們通過this.setState修改了狀態(tài)之后,在它的下一行輸出state的值并不會得到新的值

(2) 為什么是異步?

有兩個原因,一是提高效率,每次修改state的值都會造成render的重新渲染,將多次修改state的值合并統(tǒng)一更新可以提高性能;二是render的更新會晚一些,如果render中有子組件,子組件的props依賴于父組件的state,props和state就不能保持一致

(3) 如何獲取異步時的state值?
① 在setState的回調函數(shù)中

this.setState({ 
  count: this.state.count + 1}}, 
  ()=>{ console.log(this.state.count)})

② 在componentDidUpdate中獲取

componentDidUpdate(){
  console.log(this.state.count)
}

☆☆☆☆☆ 是同步的

(1) 即我們通過this.setState修改狀態(tài)之后,在它的下一行輸出state是新的值

(2) 什么場景下是同步的?
① 原生js獲取dom元素,并綁定事件

<button id="addBtn">點我+1</button>
componentDidMount(){
   const addBtn = document.getElementById('addBtn')
   changeBtn.addEventListener('click',()=>{
       this.setState({ count: this.state.count + 1})
       console.log(this.state.message)
   })
}

② 計時器 setTimeout

<button onClick={ e => this.addOne() }>點我+1</button>
addOne(){
setTimeout(()=>{ this.setState({ count: this.state.count + 1 })
 console.log(this.state.count ) },0)
}

到此這篇關于React中setState的使用與同步異步的使用的文章就介紹到這了,更多相關React setState同步異步內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • React組件二次包裝的具體實現(xiàn)

    React組件二次包裝的具體實現(xiàn)

    本文主要介紹了React組件二次包裝的具體實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • react antd-design Select全選功能實例

    react antd-design Select全選功能實例

    這篇文章主要介紹了react antd-design Select全選功能實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 一文詳解React中如何處理高階組件中的錯誤

    一文詳解React中如何處理高階組件中的錯誤

    在?React?高階組件中處理錯誤是確保應用程序健壯性和穩(wěn)定性的重要環(huán)節(jié),本文為大家整理了一些處理高階組件中錯誤的常見方法,需要的小伙伴可以參考下
    2025-02-02
  • React使用高德地圖的實現(xiàn)示例(react-amap)

    React使用高德地圖的實現(xiàn)示例(react-amap)

    這篇文章主要介紹了React使用高德地圖的實現(xiàn)示例(react-amap),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • React?setState是異步還是同步原理解析

    React?setState是異步還是同步原理解析

    這篇文章主要為大家介紹了React?setState是異步還是同步原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • React中的useEffect useLayoutEffect到底怎么用

    React中的useEffect useLayoutEffect到底怎么用

    這篇文章主要介紹了React中的useEffect useLayoutEffect具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-02-02
  • React如何實現(xiàn)全屏監(jiān)聽Esc鍵

    React如何實現(xiàn)全屏監(jiān)聽Esc鍵

    這篇文章主要介紹了React如何實現(xiàn)全屏監(jiān)聽Esc鍵,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • React引入css的三種方式小結

    React引入css的三種方式小結

    這篇文章主要介紹了React引入css的三種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • React日期時間顯示組件的封裝方法

    React日期時間顯示組件的封裝方法

    這篇文章主要為大家詳細介紹了React日期時間顯示組件的封裝方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • React根據(jù)配置生成路由的示例代碼

    React根據(jù)配置生成路由的示例代碼

    React路由看似只能由Route組件包裹組件的結構來構成,但是其實也可以通過編寫路由數(shù)組配置然后通過數(shù)組循環(huán)來生成Route組件包裹組件的結構,所以本文給大家介紹了React根據(jù)配置生成路由的方法,需要的朋友可以參考下
    2024-11-11

最新評論

道孚县| 康保县| 澄迈县| 锡林浩特市| 分宜县| 卓尼县| 大兴区| 井陉县| 克什克腾旗| 邵东县| 临武县| 济南市| 吉安市| 民县| 周口市| 淳安县| 偏关县| 马公市| 赞皇县| 儋州市| 漳州市| 大连市| 白朗县| 夏河县| 龙泉市| 乐亭县| 武定县| 武山县| 府谷县| 广饶县| 霞浦县| 金昌市| 龙井市| 白河县| 夏邑县| 贡嘎县| 邹城市| 吴旗县| 余江县| 龙陵县| 温州市|