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

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

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

      zwvista

      導(dǎo)航

      React.js 學(xué)習(xí)筆記(2)

      函數(shù)型組件,鉤子函數(shù)

      React 最新的趨勢是使用函數(shù)型組件來代替類組件。
      與類組件相比,函數(shù)型組件缺少狀態(tài),生命周期等必要的元素。
      React 通過引入鉤子函數(shù)來解決這些問題。

      useState

      在函數(shù)型組件中定義狀態(tài)值需要使用 useState 鉤子函數(shù)。
      改變組件的狀態(tài)值會觸發(fā)組件的更新,即組件會被重新渲染。
      useState 函數(shù)的參數(shù)為該狀態(tài)值的初值。
      useState 函數(shù)的返回值中可以提取該狀態(tài)值的 getter 和 setter。

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

      這里定義一個狀態(tài),初值為 0。
      getter 為 count,類型為 int,可以提取當(dāng)前狀態(tài)值。
      setter 為 setCount。可以設(shè)置狀態(tài)的值。
      setCount 的參數(shù)可以是 int,用于同步更新,也可以是一個回調(diào)函數(shù),用于異步更新。

      count
      setCount(count + 1);
      setCount(n => n + 1);
      

      useEffect

      在函數(shù)型組件中執(zhí)行副作用需要使用 useEffect 鉤子函數(shù)。
      useEffect 大致有三種功能。

      1. 組件更新后觸發(fā)副作用
      2. 在組件再次更新或卸載之前執(zhí)行對副作用的清理操作
      3. 通過監(jiān)聽某些依賴項來控制副作用和清理操作被執(zhí)行的時機(jī)

      useEffect 有兩個參數(shù)。
      useEffect 的第一個參數(shù)為回調(diào)函數(shù),可以在其中定義需要觸發(fā)的副作用。
      useEffect 的回調(diào)函數(shù)參數(shù)如果有返回值,可以返回一個回調(diào)函數(shù),在其中定義需要執(zhí)行的清理操作。
      useEffect 的第二個參數(shù)為需要監(jiān)聽的依賴項數(shù)組。這里的依賴項是指組件的狀態(tài)值。
      useEffect 的第二個參數(shù)不存在時,組件每次更新后都會觸發(fā)副作用,在組件再次更新或卸載之前都會執(zhí)行清理操作。
      useEffect 的第二個參數(shù)為空數(shù)組時,只有在組件初始化后才會觸發(fā)副作用,只有在組件卸載之前才會執(zhí)行清理操作。
      useEffect 的第二個參數(shù)為包含某些依賴項的非空數(shù)組時,只有這些依賴項的值發(fā)生變化后組件才會執(zhí)行副作用和清理操作。這里變化的依據(jù)是引用相等性。
      useEffect 所定義的回調(diào)函數(shù)和清理操作至少會被執(zhí)行一次。

      // 依賴項數(shù)組不存在,每次組件更新都會觸發(fā)副作用
      useEffect(() => {
        // 副作用
      });
      
      // 依賴項數(shù)組為空,組件初始化后執(zhí)行副作用,組件卸載前執(zhí)行清理操作
      useEffect(() => {
        // 副作用
        const id = setInterval(callback, 1000);
        return () => {
          // 清理操作
          clearInterval(id);
        };
      }, []);
      
      // 依賴項數(shù)組不為空,只有當(dāng)其中的對象發(fā)生變化時才會觸發(fā)副作用
      useEffect(() => {
        // 副作用
      }, [a, b, c]);
      

      useReducer

      useReducer 鉤子函數(shù)是 useState 的增強版,該函數(shù)為狀態(tài)值的管理提供了更強的控制能力。
      useReducer 有兩個參數(shù),reducer 回調(diào)函數(shù)和狀態(tài)的初始值。
      reducer 回調(diào)函數(shù)有兩個參數(shù),分別是當(dāng)前的狀態(tài)值和 action 參數(shù)。
      reducer 回調(diào)函數(shù)的 action 參數(shù)可以不存在,可以是指定操作類型的字符串,也可以是包含操作類型和操作負(fù)載的復(fù)雜對象。
      reducer 回調(diào)函數(shù)依據(jù) action 參數(shù)的值執(zhí)行相應(yīng)的操作并返回新的狀態(tài)值。
      useReducer 函數(shù)的返回值中可以提取該狀態(tài)值的 getter 和 dispatch。
      狀態(tài)值的 dispatch 函數(shù)帶有一個 action 參數(shù)。
      通過調(diào)用 dispatch 函數(shù)可以將當(dāng)前狀態(tài)值以及 action 參數(shù)傳遞給 reducer 回調(diào)函數(shù),執(zhí)行相應(yīng)的操作并用返回值來更新狀態(tài)值。

      // action 參數(shù)不存在
      const [state, dispatch] = useReducer(x => x + 1, 0);
      // dispatch 函數(shù)被調(diào)用,state 無條件遞增
      dispatch(); // state = 1
      
      const [, forceUpdate] = useReducer(x => x + 1, 0);
      // forceUpdate 函數(shù)被調(diào)用,由于不知名狀態(tài)值被更新,組件被強制更新
      forceUpdate();
      
      // action 參數(shù)是簡單的操作類型
      const reducer = (state, action) => {
        if (action === '++') return state + 1;
        if (action === '--') return state - 1;
        return state;
      }
      const [state, dispatch] = useReducer(reducer, 0);
      
      // dispatch 函數(shù)被調(diào)用,根據(jù)操作類型 state 遞增或遞減
      dispatch('++'); // state = 1
      dispatch('--'); // state = 0
      
      // action 參數(shù)是個對象,內(nèi)含操作類型和操作負(fù)載(操作所涉及的參數(shù))
      const reducer = (state, action) => {
        if (action.type === '+') return state + action.payload;
        if (action.type === '-') return state - action.payload;
        return state;
      }
      const [state, dispatch] = useReducer(reducer, 0);
      
      // dispatch 函數(shù)被調(diào)用,根據(jù)操作類型 state 增加或減少操作負(fù)載所對應(yīng)的數(shù)值
      dispatch({type: '+', payload: 2}); // state = 2
      dispatch({type: '-', payload: 3}); // state = -1
      

      useRef

      useRef 鉤子函數(shù)用于引用一個不參與組件渲染的值。
      useRef 函數(shù)的參數(shù)為引用的初始值。
      useRef 函數(shù)返回所創(chuàng)建的引用,該引用有一個 current 字段,用于讀取或設(shè)置引用的當(dāng)前值。
      useRef 所創(chuàng)建的引用可以在組件的多次渲染期間保持當(dāng)前值不變。
      改變引用的當(dāng)前值不會觸發(fā)組件的更新。

      // ref 引用不參與組件的渲染
      const ref = useRef(0); // ref.current = 0
      // 改變 ref 引用的值不會觸發(fā)組件的更新
      ref.current++; // ref.current = 1
      

      useRef 函數(shù)可以用于獲取 DOM 元素的引用

      // inputRef 用于保存輸入框組件的引用
      const inputRef = useRef(null);
      // 將輸入框的背景色設(shè)置為黃色
      inputRef.current.style.background = "yellow"
      // 獲取輸入框組件的引用
      <input type="text" ref={inputRef} />
      

      useRef 函數(shù)所創(chuàng)建的引用可用于存放 timer interval 的 id

      useMemo

      在多次渲染期間緩存計算結(jié)果可以使用 useMemo 鉤子函數(shù)。
      useMemo 可用于計算屬性,也可用于防止某些耗時較長的操作反復(fù)執(zhí)行。
      useMemo 有兩個參數(shù)。
      useMemo 的第一個參數(shù)是用于計算的 calculate 回調(diào)函數(shù)。
      calculate 回調(diào)函數(shù)沒有參數(shù),函數(shù)體內(nèi)計算并返回需要緩存的值。
      useMemo 的第二個參數(shù)是需要監(jiān)聽的依賴項數(shù)組。這里的依賴項是指組件的狀態(tài)值。
      首次計算或者依賴項數(shù)組中的依賴項發(fā)生變化時 useMemo 返回計算結(jié)果。
      依賴項數(shù)組沒有變化時 useMemo 返回之前緩存的值。

      const result = useMemo(() => slowFunction(), []);
      
      const result = useMemo(() => cal(count), [count]);
      

      posted on 2022-10-26 02:13  zwvista  閱讀(33)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲伊人成无码综合网| 亚洲欧洲一区二区三区久久| 国产精品电影久久久久电影网| 日本妇人成熟免费| 日韩国产欧美精品在线| 综合久青草视频在线观看| 日韩欧美不卡一卡二卡3卡四卡2021免费| 亚洲精品乱码久久久久红杏| 国精品无码一区二区三区在线看| 国产中文三级全黄| 午夜性色一区二区三区不卡视频| 国产精品污www在线观看| 国产精品无码专区av在线播放| 国产午夜精品久久一二区| 国产+亚洲+制服| 大地资源免费视频观看| 亚洲中文字幕无码日韩精品| 国产日韩一区二区四季| 国产精品美女一区二区三| 欧美日韩v| 国产精品久久久久久福利| 精品国产欧美一区二区五十路| 固镇县| 日本九州不卡久久精品一区| 美欧日韩一区二区三区视频| 日韩美a一级毛片| 亚洲最大成人在线播放| 丝袜美腿亚洲综合在线观看视频| 玩弄漂亮少妇高潮白浆| 红桃视频成人传媒| 亚洲人成网站在线在线观看| 成人3D动漫一区二区三区| 国产精品天干天干综合网| 中文无码热在线视频| 国产精品熟女乱色一区二区| 猫咪AV成人永久网站在线观看| 亚洲色婷婷综合开心网| 欧美国产日韩在线三区| 午夜亚洲AV日韩AV无码大全| 黑水县| 亚洲天堂成人黄色在线播放|