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

React 中 setState使用小結(jié)

 更新時(shí)間:2023年10月30日 14:55:55   作者:大佩梨  
這篇文章主要介紹了React 中 setState使用小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近復(fù)習(xí)了一些關(guān)于react的基礎(chǔ),記錄一下,setState使用的細(xì)節(jié)。
setState的異步更新
自定義事件中為異步更新

<div>
  <h2>{this.state.message}</h2>
  <button onClick={e => this.changeText()}>改變文本</button>
  </div>
changeText() {
  this.setState({
    message: "Hello React"
  })
  console.log(this.state.message);  // Hello World, 并不能同步拿到最新值 Hello React
}

為什么setState設(shè)計(jì)為異步呢?
setState設(shè)計(jì)為異步,可以顯著的提升性能;

如果每次調(diào)用setState都進(jìn)行一次更新,那么意味著render函數(shù)會(huì)被頻繁調(diào)用,界面重新渲染,這樣效率是很低的;最好的辦法應(yīng)該是獲取到多個(gè)更新,之后進(jìn)行批量更新;
如果同步更新了state,但是還沒(méi)有執(zhí)行render函數(shù),那么state和props不能保持同步;state和props不能保持一致性,會(huì)在開(kāi)發(fā)中產(chǎn)生很多的問(wèn)題

及時(shí)獲取到setState異步更新后的值:
1.setState(partialState, callback) 通過(guò)回調(diào),callback方法獲取,

changeText() {
  this.setState({
    message: "Hello React"
  }, () => {
    console.log(this.state.message); // Hello React
  });
}

2.生命周期函數(shù) componentDidUpdate 獲取

componentDidUpdate(prevProps, provState) {
  console.log(this.state.message); // Hello React
}

setState的同步更新
setTimeout 中為同步更新

changeText() {
  setTimeout(() => {
    this.setState({
      message: "Hello React"
    });
    console.log(this.state.message); // Hello React
  }, 0);
}

原生DOM事件中為同步更新

const btnEl = document.getElementById("btn");
  btnEl.addEventListener('click', () => {
    this.setState({
      message: "Hello React"
    });
  console.log(this.state.message);  // Hello React
})

setState的數(shù)據(jù)合并

使用 Object.assign(target, …sources)來(lái)完成的,每次setState并沒(méi)有直接替換state中的所有數(shù)據(jù),而是覆蓋差異項(xiàng),就是setState中的key項(xiàng)

setState的方法合并

多個(gè)setState連續(xù)執(zhí)行,最終只會(huì)執(zhí)行一個(gè),例子中最后counter只增加了 1

increment() {
  this.setState({
    counter: this.state.counter + 1
  });
  this.setState({
    counter: this.state.counter + 1
  });
  this.setState({
    counter: this.state.counter + 1
  });
}

setState(callback) 取消合并,例子中最后counter只增加了 3

increment() {
  this.setState((state, props) => {
    return {
      counter: state.counter + 1
    }
  })

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

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

總結(jié)

在組件生命周期或React合成事件中,setState是異步; 在定時(shí)器或原生dom事件中,setState是同步;
setState數(shù)據(jù)合并,實(shí)際上是Object.assign(target, …sources)
通過(guò)setState(callback)的方式可取消setState的多個(gè)合并

到此這篇關(guān)于React 中 setState詳解的文章就介紹到這了,更多相關(guān)React setState內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React?Virtual?DOM前端框架全面分析

    React?Virtual?DOM前端框架全面分析

    這篇文章主要為大家介紹了React?Virtual?DOM前端框架全面分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 詳解react-webpack2-熱模塊替換[HMR]

    詳解react-webpack2-熱模塊替換[HMR]

    這篇文章主要介紹了詳解react-webpack2-熱模塊替換[HMR], 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 解決React報(bào)錯(cuò)React.Children.only expected to receive single React element child

    解決React報(bào)錯(cuò)React.Children.only expected to rece

    這篇文章主要為大家介紹了React報(bào)錯(cuò)React.Children.only expected to receive single React element child分析解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • 一起來(lái)學(xué)習(xí)React元素的創(chuàng)建和渲染

    一起來(lái)學(xué)習(xí)React元素的創(chuàng)建和渲染

    這篇文章主要為大家詳細(xì)介紹了React元素的創(chuàng)建和渲染,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • react項(xiàng)目?jī)?yōu)化配置的操作詳解

    react項(xiàng)目?jī)?yōu)化配置的操作詳解

    這篇文章主要介紹了react項(xiàng)目?jī)?yōu)化配置,主要包括優(yōu)化配置CDN,優(yōu)化路由懶加載,結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • react-intl實(shí)現(xiàn)React國(guó)際化多語(yǔ)言的方法

    react-intl實(shí)現(xiàn)React國(guó)際化多語(yǔ)言的方法

    這篇文章主要介紹了react-intl實(shí)現(xiàn)React國(guó)際化多語(yǔ)言的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • React組件內(nèi)事件傳參實(shí)現(xiàn)tab切換的示例代碼

    React組件內(nèi)事件傳參實(shí)現(xiàn)tab切換的示例代碼

    本篇文章主要介紹了React組件內(nèi)事件傳參實(shí)現(xiàn)tab切換的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • React?createRef循環(huán)動(dòng)態(tài)賦值ref問(wèn)題

    React?createRef循環(huán)動(dòng)態(tài)賦值ref問(wèn)題

    這篇文章主要介紹了React?createRef循環(huán)動(dòng)態(tài)賦值ref問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • hooks中useEffect()使用案例詳解

    hooks中useEffect()使用案例詳解

    這篇文章主要介紹了hooks中useEffect()使用總結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • React、Vue中key的作用詳解 (key的內(nèi)部原理解析)

    React、Vue中key的作用詳解 (key的內(nèi)部原理解析)

    key是虛擬DOM對(duì)象的標(biāo)識(shí),當(dāng)狀態(tài)中的數(shù)據(jù)發(fā)生變化時(shí),Vue會(huì)根據(jù)[新數(shù)據(jù)]生成[新的虛擬DOM],本文給大家介紹React、Vue中key的作用詳解 (key的內(nèi)部原理解析),感興趣的朋友一起看看吧
    2023-10-10

最新評(píng)論

鄂州市| 衢州市| 普格县| 伊宁县| 灵石县| 平顺县| 筠连县| 宿州市| 石屏县| 辰溪县| 贡觉县| 南川市| 大荔县| 怀远县| 横山县| 澄城县| 将乐县| 蓬莱市| 潼关县| 高尔夫| 翼城县| 巴彦淖尔市| 阜平县| 大同县| 吉木乃县| 临沭县| 枣阳市| 桐柏县| 波密县| 河间市| 巧家县| 合江县| 南溪县| 卓资县| 城固县| 建德市| 巴林右旗| 林芝县| 右玉县| 永城市| 闽清县|