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

react中useState改變值不渲染的解決方式

 更新時(shí)間:2022年12月03日 08:59:25   作者:湫ii  
這篇文章主要介紹了react中useState改變值不渲染的解決方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

react中useState改變值不渲染

React中默認(rèn)淺監(jiān)聽,當(dāng)State值為對象時(shí),棧中存的是對象的引用(地址),setState改變的是堆中的數(shù)據(jù)

所以此時(shí) setArr(arr) 后,棧中的地址還是原地址,React淺監(jiān)聽到地址沒變,故會認(rèn)為State并未改變,故沒有重渲染頁面

解決的辦法

示例如下:

利用ES6的拓展符

const [arr, setArr] = useState([])
setArr([...arr])

react踩坑 useState的兩次渲染

問題背景,函數(shù)組件中使用useState后,console.log發(fā)現(xiàn)組件重復(fù)渲染。

一開始我以為是useState的問題,經(jīng)查驗(yàn),發(fā)現(xiàn)是index.tsx里<React.StrictMode>的坑

ReactDOM.render(
? <React.StrictMode>
? ? <App />
? </React.StrictMode>,
? document.getElementById('root')
);

以下內(nèi)容,摘自react官網(wǎng),如果你很忙可以不看!總之,渲染兩次沒事,生產(chǎn)模式下不會這樣。

StrictMode 目前有助于:

  • 識別不安全的生命周期
  • 關(guān)于使用過時(shí)字符串 ref API 的警告
  • 關(guān)于使用廢棄的 findDOMNode 方法的警告

檢測意外的副作用

檢測過時(shí)的 context API

檢測意外的副作用

從概念上講,React 分兩個階段工作:

渲染 階段會確定需要進(jìn)行哪些更改,比如 DOM。在此階段,React 調(diào)用 render,然后將結(jié)果與上次渲染的結(jié)果進(jìn)行比較。

提交 階段發(fā)生在當(dāng) React 應(yīng)用變化時(shí)。(對于 React DOM 來說,會發(fā)生在 React 插入,更新及刪除 DOM 節(jié)點(diǎn)的時(shí)候。)在此階段,React 還會調(diào)用 componentDidMount 和 componentDidUpdate 之類的生命周期方法。

提交階段通常會很快,但渲染過程可能很慢。因此,即將推出的 concurrent 模式 (默認(rèn)情況下未啟用) 將渲染工作分解為多個部分,對任務(wù)進(jìn)行暫停和恢復(fù)操作以避免阻塞瀏覽器。這意味著 React 可以在提交之前多次調(diào)用渲染階段生命周期的方法,或者在不提交的情況下調(diào)用它們(由于出現(xiàn)錯誤或更高優(yōu)先級的任務(wù)使其中斷)。

渲染階段的生命周期包括以下 class 組件方法:

  • constructor
  • componentWillMount (or UNSAFE_componentWillMount)
  • componentWillReceiveProps (or UNSAFE_componentWillReceiveProps)
  • componentWillUpdate (or UNSAFE_componentWillUpdate)
  • getDerivedStateFromProps
  • shouldComponentUpdate
  • render
  • setState 更新函數(shù)(第一個參數(shù))

因?yàn)樯鲜龇椒赡軙欢啻握{(diào)用,所以不要在它們內(nèi)部編寫副作用相關(guān)的代碼,這點(diǎn)非常重要。忽略此規(guī)則可能會導(dǎo)致各種問題的產(chǎn)生,包括內(nèi)存泄漏和或出現(xiàn)無效的應(yīng)用程序狀態(tài)。不幸的是,這些問題很難被發(fā)現(xiàn),因?yàn)樗鼈兺ǔ>哂蟹谴_定性。

嚴(yán)格模式不能自動檢測到你的副作用,但它可以幫助你發(fā)現(xiàn)它們,使它們更具確定性。

通過故意重復(fù)調(diào)用以下函數(shù)來實(shí)現(xiàn)的該操作:

  • 類組件的 constructor,render 以及 shouldComponentUpdate 方法
  • 類組件的生命周期方法 getDerivedStateFromProps
  • 函數(shù)組件體
  • 狀態(tài)更新函數(shù) (即 setState 的第一個參數(shù))
  • 函數(shù)組件通過使用 useState,useMemo 或者 useReducer

注意:

這僅適用于開發(fā)模式。生產(chǎn)模式下生命周期不會被調(diào)用兩次。

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

相關(guān)文章

  • React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解

    React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解

    這篇文章主要weidajai?介紹了React?高階組件與Render?Props優(yōu)缺點(diǎn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 實(shí)例講解React 組件

    實(shí)例講解React 組件

    這篇文章主要介紹了React 組件的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • react-router browserHistory刷新頁面404問題解決方法

    react-router browserHistory刷新頁面404問題解決方法

    本篇文章主要介紹了react-router browserHistory刷新頁面404問題解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-12-12
  • React?antd中setFieldsValu的簡便使用示例代碼

    React?antd中setFieldsValu的簡便使用示例代碼

    form.setFieldsValue是antd?Form組件中的一個方法,用于動態(tài)設(shè)置表單字段的值,它接受一個對象作為參數(shù),對象的鍵是表單字段的名稱,值是要設(shè)置的字段值,這篇文章主要介紹了React?antd中setFieldsValu的簡便使用,需要的朋友可以參考下
    2023-08-08
  • React Redux使用配置詳解

    React Redux使用配置詳解

    react-redux是redux官方react綁定庫,能夠使react組件從redux store中讀取數(shù)據(jù),并且向store分發(fā)actions以此來更新數(shù)據(jù),這篇文章主要介紹了react-redux的設(shè)置,需要的朋友可以參考下
    2022-08-08
  • Parcel 打包示例(React HelloWorld)

    Parcel 打包示例(React HelloWorld)

    本篇文章主要介紹了Parcel 打包示例(React HelloWorld),詳細(xì)的介紹了Parcel打包的特點(diǎn)和使用示例,有興趣的可以了解一下
    2018-01-01
  • 回顧Javascript React基礎(chǔ)

    回顧Javascript React基礎(chǔ)

    這篇文章主要介紹了Javascript React基礎(chǔ),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的同學(xué)可以參考一下
    2019-06-06
  • react項(xiàng)目實(shí)踐之webpack-dev-serve

    react項(xiàng)目實(shí)踐之webpack-dev-serve

    這篇文章主要介紹了react項(xiàng)目實(shí)踐之webpack-dev-serve,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn)代碼

    React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn)代碼

    Workbox是Google Chrome團(tuán)隊(duì)推出的一套 PWA 的解決方案,這套解決方案當(dāng)中包含了核心庫和構(gòu)建工具,因此我們可以利用Workbox實(shí)現(xiàn)Service Worker的快速開發(fā),本文小編給大家介紹了React中使用Workbox進(jìn)行預(yù)緩存的實(shí)現(xiàn),需要的朋友可以參考下
    2023-11-11
  • React Native中的RefreshContorl下拉刷新使用

    React Native中的RefreshContorl下拉刷新使用

    本篇文章主要介紹了React Native中的RefreshContorl下拉刷新使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論

左云县| 周宁县| 西丰县| 洛浦县| 绥芬河市| 荔波县| 鄂伦春自治旗| 信丰县| 基隆市| 大丰市| 通化市| 大田县| 临安市| 泽库县| 屯留县| 海淀区| 德昌县| 胶南市| 天长市| 黄龙县| 芜湖市| 东乌珠穆沁旗| 新巴尔虎左旗| 吉林省| 蓝田县| 诸暨市| 噶尔县| 上蔡县| 大关县| 肥乡县| 县级市| 陇西县| 巨野县| 无棣县| 普安县| 巴林右旗| 视频| 高邮市| 古丈县| 剑阁县| 定安县|