欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

react中useState改變值不渲染

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

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

解決的辦法

示例如下:

利用ES6的拓展符

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

react踩坑 useState的兩次渲染

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

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

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

以下內容,摘自react官網,如果你很忙可以不看!總之,渲染兩次沒事,生產模式下不會這樣。

StrictMode 目前有助于:

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

檢測意外的副作用

檢測過時的 context API

檢測意外的副作用

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

渲染 階段會確定需要進行哪些更改,比如 DOM。在此階段,React 調用 render,然后將結果與上次渲染的結果進行比較。

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

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

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

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

因為上述方法可能會被多次調用,所以不要在它們內部編寫副作用相關的代碼,這點非常重要。忽略此規(guī)則可能會導致各種問題的產生,包括內存泄漏和或出現無效的應用程序狀態(tài)。不幸的是,這些問題很難被發(fā)現,因為它們通常具有非確定性。

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

通過故意重復調用以下函數來實現的該操作:

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

注意:

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • React八大常見錯誤及其解決方案

    React八大常見錯誤及其解決方案

    這篇文章主要介紹了React八大常見錯誤及其解決方案,并通過代碼示例介紹的非常詳細,對大家學習react有一定的幫助,感興趣的朋友可以參考下
    2024-03-03
  • 詳解React路由傳參方法匯總記錄

    詳解React路由傳參方法匯總記錄

    這篇文章主要介紹了詳解React路由傳參方法匯總記錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Redux thunk中間件及執(zhí)行原理詳細分析

    Redux thunk中間件及執(zhí)行原理詳細分析

    redux的核心概念其實很簡單:將需要修改的state都存入到store里,發(fā)起一個action用來描述發(fā)生了什么,用reducers描述action如何改變state tree,這篇文章主要介紹了Redux thunk中間件及執(zhí)行原理分析
    2022-09-09
  • React 條件渲染最佳實踐小結(7種)

    React 條件渲染最佳實踐小結(7種)

    這篇文章主要介紹了React 條件渲染最佳實踐小結(7種),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • React創(chuàng)建組件的三種方式及其區(qū)別

    React創(chuàng)建組件的三種方式及其區(qū)別

    本文主要介紹了React創(chuàng)建組件的三種方式及其區(qū)別,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • react-router?v6實現動態(tài)路由實例

    react-router?v6實現動態(tài)路由實例

    這篇文章主要為大家介紹了react-router?v6實現動態(tài)路由實例詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 詳解react-native WebView 返回處理(非回調方法可解決)

    詳解react-native WebView 返回處理(非回調方法可解決)

    這篇文章主要介紹了詳解react-native WebView 返回處理(非回調方法可解決),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • React和Vue組件更新的實現及區(qū)別

    React和Vue組件更新的實現及區(qū)別

    React 和 Vue 都是當今最流行的前端框架,它們都實現了組件化開發(fā)模式,本文將從React和Vue的組件更新原理入手,剖析兩者虛擬DOM difer算法的異同點,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • React?Fiber原理深入分析

    React?Fiber原理深入分析

    Fiber可以理解為一個執(zhí)行單元,每次執(zhí)行完一個執(zhí)行單元,React?Fiber就會檢查還剩多少時間,如果沒有時間則將控制權讓出去,然后由瀏覽器執(zhí)行渲染操作,這篇文章主要介紹了React?Fiber架構原理剖析,需要的朋友可以參考下<BR>
    2023-01-01
  • React控制元素顯示隱藏的三種方法小結

    React控制元素顯示隱藏的三種方法小結

    這篇文章主要介紹了React控制元素顯示隱藏的三種方法小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評論