亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

React Hooks 鉤子的具體使用

 更新時(shí)間:2025年09月15日 09:54:10   作者:weixin_42339193  
React Hooks是React 16.8引入的重要特性,讓函數(shù)組件能夠擁有類組件的狀態(tài)和生命周期能力,下面就來介紹一下React Hooks的具體使用,m感興趣的可以了解一下

React Hooks 是 React 16.8 引入的重要特性,讓函數(shù)組件能夠擁有類組件的狀態(tài)和生命周期能力。以下是 React 官方提供的所有內(nèi)置 Hooks,按功能分類整理,附帶核心用法和場(chǎng)景說明:

一、基礎(chǔ) Hooks(最常用)

useState

  • 功能:為函數(shù)組件添加狀態(tài)管理。
const [count, setCount] = useState(0); // 初始值為0
// 更新狀態(tài)(直接賦值或函數(shù)式更新)
setCount(prev => prev + 1); 
  • 場(chǎng)景:管理組件內(nèi)部的簡(jiǎn)單狀態(tài)(如表單輸入、開關(guān)狀態(tài)等)。

useEffect

  • 功能:處理組件的副作用(如數(shù)據(jù)請(qǐng)求、訂閱、DOM 操作),替代類組件的生命周期。
  • 用法
// 組件掛載和更新時(shí)執(zhí)行(依賴項(xiàng)變化才觸發(fā))
useEffect(() => {
  const timer = setInterval(() => setCount(c => c + 1), 1000);
  // 清理函數(shù)(組件卸載或依賴變化前執(zhí)行)
  return () => clearInterval(timer); 
}, []); // 空依賴:只在掛載和卸載時(shí)執(zhí)行
  • 場(chǎng)景:數(shù)據(jù)加載、事件監(jiān)聽、定時(shí)器等需要 “副作用” 的操作。

useContext

  • 功能:跨組件共享數(shù)據(jù),避免 “props drilling”(層層傳遞 props)。
  • 用法
// 先創(chuàng)建 Context
const ThemeContext = createContext('light');
// 在組件中獲取 Context 值
const theme = useContext(ThemeContext); 

場(chǎng)景:全局狀態(tài)(如主題、用戶信息)在多層組件中的共享

二、額外的 Hooks(處理復(fù)雜場(chǎng)景)

1、useReducer

  1. 功能:通過 reducer 管理復(fù)雜狀態(tài)邏輯,類似 Redux 的簡(jiǎn)化版
// 定義 reducer 函數(shù)(狀態(tài)更新規(guī)則)
function todoReducer(state, action) {
  switch(action.type) {
    case 'ADD': return [...state, action.payload];
    default: return state;
  }
}
// 在組件中使用
const [todos, dispatch] = useReducer(todoReducer, []);
// 觸發(fā)更新
dispatch({ type: 'ADD', payload: '學(xué)習(xí) Hooks' });
  • 場(chǎng)景:狀態(tài)邏輯復(fù)雜(多值關(guān)聯(lián)、多操作類型)或需要通過子組件修改父組件狀態(tài)。

2、useCallback

功能:緩存函數(shù),避免因函數(shù)重新創(chuàng)建導(dǎo)致子組件不必要的重渲染

// 緩存 handleClick 函數(shù),依賴項(xiàng)不變則函數(shù)引用不變
const handleClick = useCallback(() => {
  console.log('點(diǎn)擊了', count);
}, [count]); // 依賴 count,count 變則函數(shù)重新創(chuàng)建

3、useMemo

  • 功能:緩存計(jì)算結(jié)果,避免每次渲染重復(fù)執(zhí)行耗時(shí)計(jì)算。
// 緩存計(jì)算結(jié)果,依賴項(xiàng)不變則直接返回緩存值
const total = useMemo(() => {
  return list.reduce((sum, item) => sum + item.price, 0);
}, [list]); // 依賴 list,list 變則重新計(jì)算
  • 場(chǎng)景:復(fù)雜計(jì)算(如大數(shù)據(jù)列表過濾、排序)。

4、useRef

  • 功能:創(chuàng)建一個(gè)可變的 ref 對(duì)象,可用于訪問 DOM 元素或存儲(chǔ)跨渲染周期的數(shù)據(jù)。
// 訪問 DOM 元素
const inputRef = useRef(null);
useEffect(() => inputRef.current.focus(), []);

// 存儲(chǔ)跨渲染的數(shù)據(jù)(修改不會(huì)觸發(fā)重渲染)
const timerRef = useRef(null);
timerRef.current = setInterval(...);

5、useImperativeHandle

  • 功能:自定義通過 ref 暴露給父組件的實(shí)例值,限制子組件暴露的接口。
function ChildComponent(props, ref) {
  const inputRef = useRef(null);
  // 只暴露 focus 方法給父組件
  useImperativeHandle(ref, () => ({
    focus: () => inputRef.current.focus()
  }));
  return <input ref={inputRef} />;
}
// 父組件通過 ref 調(diào)用子組件暴露的方法
const childRef = useRef(null);
childRef.current.focus(); 
  • 場(chǎng)景:父組件需要操作子組件 DOM,但希望限制訪問范圍(避免過度耦合)。

6、useLayoutEffect

  • 功能:與 useEffect 類似,但回調(diào)函數(shù)在 DOM 更新后同步執(zhí)行(而 useEffect 是異步)。
useLayoutEffect(() => {
  // 讀取 DOM 布局并立即修改(避免頁面閃爍)
  const { height } = elementRef.current.getBoundingClientRect();
  elementRef.current.style.marginTop = `${100 - height}px`;
}, []);
  • 場(chǎng)景:需要在 DOM 更新后立即讀取布局信息并修改(如避免因樣式計(jì)算導(dǎo)致的閃爍)。

7、useDebugValue

  • 功能:在 React DevTools 中為自定義 Hook 顯示標(biāo)簽,方便調(diào)試。
function useFriendStatus(friendId) {
  const [isOnline, setIsOnline] = useState(null);
  // 在 DevTools 中顯示 "FriendStatus: 在線/離線"
  useDebugValue(isOnline ? '在線' : '離線');
  return isOnline;
}
  • 場(chǎng)景:開發(fā)自定義 Hook 時(shí),提升調(diào)試體驗(yàn)。

三、React 18+ 新增 Hooks(并發(fā)特性相關(guān))

useTransition

功能:標(biāo)記非緊急更新,避免阻塞用戶交互(如輸入、點(diǎn)擊)。

const [isPending, startTransition] = useTransition();
// 緊急更新:立即響應(yīng)輸入
setInput(e.target.value);
// 非緊急更新:標(biāo)記為過渡任務(wù)
startTransition(() => {
  setFilteredList(filterData(e.target.value)); // 耗時(shí)操作
});
  • 場(chǎng)景:輸入搜索、列表篩選等需要 “優(yōu)先響應(yīng)輸入,延遲處理結(jié)果” 的場(chǎng)景。

2、useDeferredValue

功能:為狀態(tài)創(chuàng)建一個(gè) “延遲版本”,優(yōu)先保證 UI 響應(yīng)速度

const [input, setInput] = useState('');
// 延遲版本:input 更新后,deferredInput 會(huì)“滯后”更新
const deferredInput = useDeferredValue(input);
// 基于延遲值渲染(避免輸入時(shí)卡頓)
return <List data={filter(deferredInput)} />;
  • 場(chǎng)景:與 useTransition 類似,簡(jiǎn)化非緊急狀態(tài)的處理。

3、useId

功能:生成跨服務(wù)器和客戶端的唯一 ID,用于表單關(guān)聯(lián)、無障礙訪問(ARIA)

const id = useId(); // 生成如 "r1:2" 的唯一ID
return (
  <div>
    <label htmlFor={`${id}-name`}>姓名</label>
    <input id={`${id}-name`} />
  </div>
);
  • 場(chǎng)景:避免 SSR(服務(wù)器渲染)時(shí)客戶端與服務(wù)器 ID 不匹配的問題。

4、useSyncExternalStore

  • 功能:同步外部狀態(tài)(如 Redux、localStorage),確保在并發(fā)渲染中狀態(tài)一致性。
// 從外部 store 讀取狀態(tài)
const state = useSyncExternalStore(
  store.subscribe, // 訂閱狀態(tài)變化
  store.getState,  // 獲取當(dāng)前狀態(tài)
  store.getServerState // 服務(wù)器初始狀態(tài)(SSR用)
);
  • 場(chǎng)景:集成外部狀態(tài)管理庫(如替代 Redux 的 useSelector)。

5、useInsertionEffect

  • 功能:在 CSS-in-JS 庫中插入樣式時(shí)使用,確保樣式在 DOM 元素渲染前生效。
  • 用法:類似 useLayoutEffect,但執(zhí)行時(shí)機(jī)更早(在 DOM 突變前)。
  • 場(chǎng)景:主要供 CSS-in-JS 庫內(nèi)部使用,普通開發(fā)很少直接用到。

到此這篇關(guān)于React Hooks 鉤子的具體使用的文章就介紹到這了,更多相關(guān)React Hooks 鉤子內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 關(guān)于react中組件通信的幾種方式詳解

    關(guān)于react中組件通信的幾種方式詳解

    這篇文章主要給大家介紹了關(guān)于react中組件通信的幾種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • 詳解使用React.memo()來優(yōu)化函數(shù)組件的性能

    詳解使用React.memo()來優(yōu)化函數(shù)組件的性能

    本文講述了開發(fā)React應(yīng)用時(shí)如何使用shouldComponentUpdate生命周期函數(shù)以及PureComponent去避免類組件進(jìn)行無用的重渲染,以及如何使用最新的React.memo API去優(yōu)化函數(shù)組件的性能
    2019-03-03
  • React?Diffing?算法完整指南(示例詳解)

    React?Diffing?算法完整指南(示例詳解)

    Diffing?算法是?React?用于比較兩棵虛擬?DOM?樹差異的算法,用來確定需要更新的部分,從而最小化?DOM?操作,這篇文章主要介紹了React?Diffing?算法完整指南,需要的朋友可以參考下
    2024-12-12
  • 使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航的詳細(xì)過程

    使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航的詳細(xì)過程

    React Router Dom 是 React 應(yīng)用程序中用于處理路由的常用庫,它提供了一系列組件和 API 來管理應(yīng)用程序的路由,這篇文章主要介紹了使用 React Router Dom 實(shí)現(xiàn)路由導(dǎo)航,需要的朋友可以參考下
    2024-03-03
  • React中setState使用原理解析

    React中setState使用原理解析

    這篇文章主要介紹了React中的setState使用細(xì)節(jié)和原理解析,主要包括使用setstate的原因及基本用法,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • React不使用requestIdleCallback實(shí)現(xiàn)調(diào)度原理解析

    React不使用requestIdleCallback實(shí)現(xiàn)調(diào)度原理解析

    這篇文章主要為大家介紹了React不使用requestIdleCallback實(shí)現(xiàn)調(diào)度原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • React Native使用Modal自定義分享界面的示例代碼

    React Native使用Modal自定義分享界面的示例代碼

    本篇文章主要介紹了React Native使用Modal自定義分享界面的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 教你快速搭建 React Native 開發(fā)環(huán)境

    教你快速搭建 React Native 開發(fā)環(huán)境

    這篇文章主要介紹了搭建 React Native 開發(fā)環(huán)境的詳細(xì)過程,本文通過圖文指令給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • React-Hook中使用useEffect清除定時(shí)器的實(shí)現(xiàn)方法

    React-Hook中使用useEffect清除定時(shí)器的實(shí)現(xiàn)方法

    這篇文章主要介紹了React-Hook中useEffect詳解(使用useEffect清除定時(shí)器),主要介紹了useEffect的功能以及使用方法,還有如何使用他清除定時(shí)器,需要的朋友可以參考下
    2022-11-11
  • React表中顯示JSON數(shù)據(jù)demo

    React表中顯示JSON數(shù)據(jù)demo

    這篇文章主要為大家介紹了React表中顯示JSON數(shù)據(jù)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評(píng)論