<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      React學習筆記(一)

      組件化思想

      組件

      組件是構建 React 應用的獨立、可復用的代碼塊。它接收輸入(稱為 props),并返回描述UIReact 元素。

      函數組件 vs 類組件
      • 函數組件:一個接受輸入,并輸出JSX的函數。
      • 類組件:使用class定義,并繼承React.Component的類,必須包含一個render()方法。
      為什么函數組件成為主流

      1、代碼簡潔:函數組件的語法更簡單,沒有this綁定問題。

      2、Hooks的引入:引入Hooks后,函數組件也能擁有狀態和生命周期等能力。

      受控組件 vs 非受控組件
      • 受控組件:表單數據由React組件管理的組件。表單元素(input、textarea等)的值由state控制,并通過onChange事件來更新。
      • 非受控組件:表單數據由DOM本身進行管理,可以使用ref從DOM節點中獲取表單值。

      狀態和屬性

      state(狀態)

      • 組件內部管理的數據,狀態改變會觸發組件的重新渲染。
      • 如何更新:
        • 類組件:使用this.setState()
        • 函數組件:使用useState Hook 返回更新函數
        • 狀態的更新是異步的,React會對同一個事件處理函數中的多個狀態更新進行批處理
        • 狀態不可變,每次狀態更新都會產生新的狀態對象,直接修改狀態不會重渲染

      props(屬性)

      • 從組件外部傳入的數據,類似函數的參數,只讀,不能修改。
      • 實現父組件向子組件通信(傳遞數據、回調函數等)

      Hooks

      1、useState
      • 作用:在函數組件中添加內部狀態
      • 語法:const [state,setState] = useState(初始值)
      • 關鍵點:初始值可以是一個值,也可以是一個函數。調用setState會替換狀態對象
      2、useEffect
      • 作用:在函數組件中執行副作用操作(數據獲取,訂閱,手動修改DOM等一些異步操作)
      • 執行時機:默認情況下,在每次渲染后(包括首次渲染)都會執行。
      • 依賴數組(第二個參數)的控制:
        • 不提供依賴數組(null):每次渲染后都執行
        • 依賴數組為空([]):僅在組件掛載后執行一次(類似于componentDidMount
        • 依賴數組有值([dep1,dep2]):在組件掛載后以及dep1dep2發生改變時執行
      • 清除效應:如果useEffect的回調函數返回一個函數,這個函數會在組件卸載前和執行下一個副作用之前被調用,可以用于清理(取消訂閱、清除定時器等)
      3、useContext
      • 作用:接受一個Context對象(由React.createContext()創建)并返回該Context的當前值
      • 實現與后代組件單向通信
      4、useCallbackuseMemo
      • useCallback:緩存函數本身,用于優化性能。
        • 在進行重新渲染時,
          • 如果依賴項沒有發生變化,返回的是相同的函數,從而跳過重新渲染。
          • 當依賴項改變時,會更新函數,并重新渲染。
      • useMemo:緩存計算結果,用于優化性能
        • 避免每次重新渲染時都進行高開銷的計算任務
        • 僅在依賴項改變時重新計算。

      JS中每次運行function(){}()=>{}都會生成新的函數對象。

      父組件中定義了一個回調函數,子組件中調用了這個函數。當父組件狀態改變時,會重渲染父組件,父組件中子組件也會重渲染,其中父組件重新生成了一個新的函數對象(雖然它的功能不變,但函數的引用變了,是一個新的對象),傳入子組件的回調函數變了,所以子組件也要重新生成。

      如果使用useCallback緩存該回調函數,只要依賴數組中的元素不變,當父組件重渲染時,它會返回緩存好的函數對象,而不是生成一個新的函數對象,傳入子組件的回調函數不變,子組件跳過重新渲染。

      5、useRef
      • 訪問DOM元素
      • 存儲一個可變的值
        • ref的current屬性可以在組件的整個生命周期內持久存在,而且改變它不會觸發組件重新渲染,可以用來存儲定時器ID,上一次屬性或狀態等。

      生命周期和Hooks

      • componentDidMount:組件掛載后回調

        • 使用 useEffect 并提供一個空依賴數組 []
      • componentDidUpdate:組件狀態更新時回調

        • 使用 useEffect不提供依賴數組或提供一個非空的依賴數組
          • 使用 useRef 來保存一個在組件生命周期內持久存在的值(isMounted),它不會觸發重渲染。
          • 首次渲染時,isMounted.currentfalse,將其設為 true 但不執行更新邏輯。
          • 后續渲染時,isMounted.currenttrue,執行更新邏輯。
      • componentWillUnmount :組件卸載之前回調

        • useEffect返回一個清理函數并提供一個空依賴數組。

      虛擬DOM

      一個輕量級的Javascript對象,是真實DOM的抽象,當組件狀態改變時,React會先在虛擬DOM上進行比較計算,而不是直接操作DOM。

      • 工作流程:

        1. 當狀態改變時,會創建一個新的虛擬DOM樹。
        2. 使用Diffing算法比較新舊兩個虛擬DOM樹,找出需要更新的最小部分
        3. 將計算出來的差異批量地應用到真實DOM上
      • 減少對真實DOM樹的操作,極大提高性能。開發者無需關心如何高效地更新UI,只需要關心數據狀態。

      posted @ 2025-09-28 18:23  末雨摸魚  閱讀(51)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 精品无码中文视频在线观看| 国产成人av综合色| 日韩精品一区二区三区不卡| 欧美乱码伦视频免费| 国产精品入口中文字幕| 亚洲另类丝袜综合网| 色九月亚洲综合网| 蜜桃臀av在线一区二区| 做暖暖视频在线看片免费 | 国产精品中文字幕免费| 国产在线无码精品无码| 麻豆精品国产熟妇aⅴ一区| 亚洲精品一区二区三区不| 国产999久久高清免费观看| 亚洲高清国产拍精品熟女| 久久精品国产亚洲AⅤ无码| 美女又黄又免费的视频| 亚洲一区二区三区啪啪| 玉林市| 国产成人a∨激情视频厨房| 久久久久无码精品国产AV| 4虎四虎永久在线精品免费| av无码小缝喷白浆在线观看| 亚洲禁精品一区二区三区| 不卡一区二区国产在线| 黑河市| 亚洲人成线无码7777| 亚洲av无码成人影院一区| 国产精品久久久福利| 亚洲国产永久精品成人麻豆| 亚洲国产成人av毛片大全 | 亚洲日产韩国一二三四区| 成人无码潮喷在线观看| h无码精品3d动漫在线观看| 国产v综合v亚洲欧美大天堂| 爱情岛亚洲论坛成人网站| 精品免费看国产一区二区| AV最新高清无码专区| 欧美视频在线播放观看免费福利资源| 亚洲乱理伦片在线观看中字| 淮滨县|