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

ReactHook使用useState更新變量后,如何拿到變量更新后的值

 更新時(shí)間:2024年03月13日 09:41:38   作者:wen_文文  
這篇文章主要介紹了ReactHook使用useState更新變量后,如何拿到變量更新后的值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

ReactHook使用useState更新變量后,如何拿到變量更新后的值

場(chǎng)景

const [count, setCount] = useState(0);

在setCount() 更新變量的值后,立即調(diào)用某個(gè)函數(shù)query,在函數(shù)中需要讀取到這個(gè)變量的新值;但是此時(shí)直接調(diào)用的話拿到的是舊值; 

為什么變量更新后不能立即拿到新值? 

因?yàn)閟etCount 函數(shù)用于更新 count值。

它接收一個(gè)新的 count 值并將組件的一次重新渲染加入隊(duì)列中,在組件的重新渲染中,

useState()返回的第一個(gè)值始終是count更新后的新值,所以如果組件還未重新渲染就直接讀取count變量的話,

拿到的就是未更新的舊值;

const UseState = () => {
  // 函數(shù)組件中沒(méi)有this
  const [count, setCount] = useState(0)
 
  const add = () => {
    let newCount = count
    console.log('value1', count);  // 0
    setCount( newCount+= 1)
    console.log('value2', count);  // 0
    query() 
  }
 
  const query = () => {
    console.log('query函數(shù)中:', count);  // 0
  }
  return (
    <div>
      <p>{count}</p>
      <button onClick={add} >增加</button>
    </div>
  )
}

打印結(jié)果:

解決方法

1)可以將count的新值通過(guò)函數(shù)傳參的方式傳入query函數(shù);

// 改寫(xiě)add和query函數(shù);
 
const add = () => {
    let newCount = count
    console.log('value1', count);
    setCount( newCount+= 1)
    console.log('value2', count);
    query(newCount)   
 }
 const query = (count) => {
    console.log('query函數(shù)中:', count);
 }

打印結(jié)果: 

2)在useEffect中調(diào)用query函數(shù),因?yàn)樵趗seEffect中,組件dom已經(jīng)更新完畢,可以拿到count的最新值;

(缺點(diǎn):每次count值改變,都會(huì)觸發(fā)useEffect,從而執(zhí)行query函數(shù);)

  // 組件每次渲染之后執(zhí)行的操作,執(zhí)行該操作時(shí)dom都已經(jīng)更新完畢
  useEffect(()=>{
    // 1、可在此處拿到count更新后的值
    console.log('value3', count);
    query()
  }, [count])
 
  const add = () => {
    let newCount = count
    console.log('value1', count);
    setCount( newCount+= 1)
    console.log('value2', count);
  }
 const query = () => { 
   console.log('query函數(shù)中:', count);
 }

打印結(jié)果: 

3)通過(guò)useRef()定義一個(gè)可變的ref變量,通過(guò)current屬性保存count可變值,從而在count更新后,通過(guò)ref的current屬性拿到更新后的count值;

注意:調(diào)用query函數(shù)時(shí)需要加上setTimeout()進(jìn)行調(diào)用;

// 定義一個(gè)可變的countRef對(duì)象,該對(duì)象的current屬性被初始化為傳入的參數(shù)count;
const countRef = useRef(count)
 
// 在countRef.current屬性中保存一個(gè)可變值count的盒子;
countRef.current = count
 
const add = () => {
   let newCount = count
   console.log('value1', count);
   setCount( newCount+= 1)
   console.log('value2', count);
   setTimeout(() => query(), 0);
}
 
const query = () => {
   console.log('query函數(shù)中:', countRef.current);
}

打印結(jié)果: 

 

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • React中使用Axios發(fā)起POST請(qǐng)求提交文件方式

    React中使用Axios發(fā)起POST請(qǐng)求提交文件方式

    這篇文章主要介紹了React中使用Axios發(fā)起POST請(qǐng)求提交文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • React在Dva項(xiàng)目中創(chuàng)建并引用頁(yè)面局部組件的方式

    React在Dva項(xiàng)目中創(chuàng)建并引用頁(yè)面局部組件的方式

    這篇文章主要介紹了React在Dva項(xiàng)目中創(chuàng)建并引用頁(yè)面局部組件的方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • 詳解React Angular Vue三大前端技術(shù)

    詳解React Angular Vue三大前端技術(shù)

    當(dāng)前世界中,技術(shù)發(fā)展非常迅速并且變化迅速,開(kāi)發(fā)者需要更多的開(kāi)發(fā)工具來(lái)解決不同的問(wèn)題。本文就對(duì)于當(dāng)下主流的前端開(kāi)發(fā)技術(shù)React、Vue、Angular這三個(gè)框架做個(gè)相對(duì)詳盡的探究,目的是為了解開(kāi)這些前端技術(shù)的面紗,看看各自的廬山真面目。
    2021-05-05
  • React內(nèi)部實(shí)現(xiàn)cache方法示例詳解

    React內(nèi)部實(shí)現(xiàn)cache方法示例詳解

    這篇文章主要為大家介紹了React內(nèi)部實(shí)現(xiàn)cache方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果

    ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果

    本文介紹了ReactNative實(shí)現(xiàn)的橫向滑動(dòng)條效果,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),補(bǔ)充介紹了ReactNative基于寬度變化實(shí)現(xiàn)的動(dòng)畫(huà)效果,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 解決React報(bào)錯(cuò)Invalid hook call

    解決React報(bào)錯(cuò)Invalid hook call

    這篇文章主要為大家介紹了React報(bào)錯(cuò)Invalid hook call解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • React Router 5.1.0使用useHistory做頁(yè)面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn)

    React Router 5.1.0使用useHistory做頁(yè)面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn)

    本文主要介紹了React Router 5.1.0使用useHistory做頁(yè)面跳轉(zhuǎn)導(dǎo)航的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • React使用api的方式封裝彈窗的示例代碼

    React使用api的方式封裝彈窗的示例代碼

    在現(xiàn)代開(kāi)發(fā)中的彈窗樣式,經(jīng)常會(huì)是底部一個(gè)叉號(hào)樣式的彈窗,但是目前組件庫(kù)中并無(wú)類(lèi)似彈窗組件,本文小編給大家介紹了React使用api的方式封裝彈窗的示例,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-09-09
  • React封裝彈出框組件的方法

    React封裝彈出框組件的方法

    這篇文章主要為大家詳細(xì)介紹了React封裝彈出框組件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 一文詳解React如何處理表單的復(fù)雜驗(yàn)證邏輯

    一文詳解React如何處理表單的復(fù)雜驗(yàn)證邏輯

    這篇文章主要為大家詳細(xì)介紹了React中如何處理表單的復(fù)雜驗(yàn)證邏輯,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03

最新評(píng)論

措美县| 桂平市| 巴楚县| 韶关市| 五寨县| 青川县| 苍梧县| 拉萨市| 乐平市| 大足县| 乐业县| 阳新县| 吉安市| 砀山县| 遂昌县| 额济纳旗| 漳浦县| 文昌市| 广丰县| 禹城市| 阿尔山市| 灵石县| 安达市| 高清| 盐边县| 监利县| 化隆| 京山县| 青浦区| 隆德县| 清镇市| 秦皇岛市| 楚雄市| 信阳市| 容城县| 社旗县| 巴塘县| 温泉县| 会东县| 大理市| 保定市|