React Hooks使用實戰(zhàn)深度解析
目標(biāo):從原理到實踐,掌握Hooks的正確使用和性能優(yōu)化
1、useEffect 的執(zhí)行時機具體是什么時候?它和 useLayoutEffect 有什么核心區(qū)別?
1、useEffect 的執(zhí)行時機
useEffect 是 React 提供的 Hook,用于處理副作用操作(如數(shù)據(jù)獲取、訂閱、手動 DOM 修改等)。其執(zhí)行時機遵循以下規(guī)則:
- 組件渲染完成后異步執(zhí)行:React 會在瀏覽器完成頁面繪制(即 DOM 更新后)再觸發(fā)
useEffect的回調(diào)函數(shù),避免阻塞頁面渲染。 - 依賴項變化時重新執(zhí)行:如果指定了依賴項數(shù)組,當(dāng)依賴項的值發(fā)生變化時,
useEffect會重新執(zhí)行回調(diào)函數(shù)。 - 清理函數(shù)在組件卸載或依賴變化前執(zhí)行:回調(diào)函數(shù)返回的清理函數(shù)會在組件卸載時或下一次副作用執(zhí)行前運行。
2、useLayoutEffect 的執(zhí)行時機
useLayoutEffect 的 API 與 useEffect 相同,但執(zhí)行時機不同:
- DOM 更新后、瀏覽器繪制前同步執(zhí)行:
useLayoutEffect的回調(diào)函數(shù)會在 React 完成 DOM 更新后立即執(zhí)行,但此時瀏覽器尚未進行頁面繪制。 - 適合需要同步測量的操作:例如讀取 DOM 布局(如元素尺寸、位置)或直接修改 DOM 以避免視覺閃爍。
3、核心區(qū)別
- 執(zhí)行順序
useLayoutEffect的回調(diào)函數(shù)會在useEffect之前執(zhí)行。React 的觸發(fā)順序為:
- DOM 更新 →
useLayoutEffect回調(diào) → 瀏覽器繪制 →useEffect回調(diào)。 - 性能影響
useLayoutEffect是同步執(zhí)行,可能阻塞瀏覽器渲染。過度使用會導(dǎo)致頁面卡頓。useEffect是異步執(zhí)行,對性能更友好。
- 使用場景
useEffect:適用于大多數(shù)副作用(如 API 調(diào)用、訂閱事件),無需阻塞渲染。useLayoutEffect:僅用于需要在瀏覽器繪制前同步完成的 DOM 操作(如調(diào)整元素位置避免閃爍)。
4、代碼示例
import { useEffect, useLayoutEffect } from 'react';
function Example() {
useLayoutEffect(() => {
// 同步執(zhí)行,適合 DOM 測量或修改
const element = document.getElementById('box');
console.log('Layout effect:', element.offsetWidth);
}, []);
useEffect(() => {
// 異步執(zhí)行,適合數(shù)據(jù)獲取等非緊急操作
console.log('Effect triggered after paint');
}, []);
return <div id="box">Content</div>;
}5、注意事項
- 服務(wù)端渲染(SSR):
useLayoutEffect在 SSR 環(huán)境下會觸發(fā)警告(因無 DOM),需替換為useEffect或動態(tài)導(dǎo)入組件。 - 性能優(yōu)化:優(yōu)先使用
useEffect,僅在必要時(如解決布局問題)使用useLayoutEffect。
2、你能深入剖析一下 useEffect 的依賴項嗎?它背后的原理是什么?
1、useEffect 依賴項的深入剖析
- 依賴項的作用機制
依賴項數(shù)組用于確定 useEffect 是否應(yīng)重新執(zhí)行。當(dāng)組件重新渲染時,React 會通過 Object.is 比較當(dāng)前依賴項和上一次的依賴項值。若任一依賴項發(fā)生變化,副作用函數(shù)會重新執(zhí)行;若依賴項為空數(shù)組 [],則副作用僅在組件掛載和卸載時執(zhí)行。
- 依賴項與閉包的關(guān)系
副作用函數(shù)會捕獲定義時的閉包。若依賴項缺失,函數(shù)內(nèi)引用的變量可能為舊值。例如:
const [count, setCount] = useState(0);
useEffect(() => {
console.log(count); // 若依賴項缺失,可能打印過時的 count
}, []); // 應(yīng)改為 [count]2、依賴項優(yōu)化的原理
- 依賴項的動態(tài)處理
React 在每次渲染時會生成新的副作用函數(shù),依賴項的比較發(fā)生在渲染提交階段。若依賴項是引用類型(如對象或數(shù)組),即使內(nèi)容相同,引用變化也會觸發(fā)重新執(zhí)行。此時可通過 useMemo 或 useCallback 穩(wěn)定引用。
- 自動依賴檢測的限制
ESLint 插件 exhaustive-deps 會靜態(tài)分析代碼中的依賴關(guān)系,但無法識別動態(tài)依賴(如循環(huán)生成的依賴項)。手動維護依賴項時需確保邏輯一致性。
3、依賴項與性能的權(quán)衡
- 不必要的依賴項
添加過多依賴項可能導(dǎo)致頻繁執(zhí)行副作用??赏ㄟ^拆分多個 useEffect 或提取穩(wěn)定值來優(yōu)化:
useEffect(() => {
const timer = setInterval(() => {}, delay);
return () => clearInterval(timer);
}, [delay]); // 僅當(dāng) delay 變化時重建定時器- 依賴項與清除機制
每次副作用重新執(zhí)行前,會先執(zhí)行上一次的清除函數(shù)(若存在)。依賴項變化頻率直接影響資源清理和重建的開銷。
4、高級模式與原理
- 條件執(zhí)行模式
通過在副作用函數(shù)內(nèi)部添加條件判斷,可減少實際操作的觸發(fā)次數(shù),但依賴項仍需完整聲明:
useEffect(() => {
if (isValid(data)) {
fetchData(data);
}
}, [data]); // 即使有內(nèi)部判斷,data 仍需作為依賴- 引用穩(wěn)定性策略
對于事件處理等場景,使用 useCallback 可避免因函數(shù)引用變化導(dǎo)致的依賴項失效:
const fetchData = useCallback(() => {
// 邏輯代碼
}, [query]); // query 變化時才更新函數(shù)引用通過理解依賴項的比對機制、閉包特性和性能影響,可以更精準(zhǔn)地控制副作用的行為。實踐時應(yīng)結(jié)合具體場景平衡依賴項的完整性與執(zhí)行效率。
3、在 useEffect 中,如何正確地處理異步請求并避免競態(tài)條件(Race Condition)?
1、在 useEffect 中處理異步請求
使用 useEffect 處理異步請求時,需要確保組件卸載時取消未完成的請求??梢酝ㄟ^ AbortController 實現(xiàn)請求的取消功能。
useEffect(() => {
const abortController = new AbortController();
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data', {
signal: abortController.signal
});
const data = await response.json();
// 處理數(shù)據(jù)
} catch (error) {
if (error.name !== 'AbortError') {
// 處理非取消錯誤
}
}
};
fetchData();
return () => {
abortController.abort();
};
}, []);2、避免競態(tài)條件
競態(tài)條件發(fā)生在多個請求按不同順序返回時,導(dǎo)致最終顯示的數(shù)據(jù)與預(yù)期不符??梢酝ㄟ^以下方式避免:
- 使用清理函數(shù)
在useEffect的清理函數(shù)中取消未完成的請求,確保只有最新的請求生效。
useEffect(() => {
let ignore = false;
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
if (!ignore) {
// 更新狀態(tài)
}
};
fetchData();
return () => {
ignore = true;
};
}, [dependency]);- 使用請求標(biāo)識符
為每個請求分配唯一標(biāo)識符,并在處理響應(yīng)時檢查標(biāo)識符是否匹配
useEffect(() => {
let requestId = 0;
const fetchData = async () => {
const currentRequestId = ++requestId;
const response = await fetch('https://api.example.com/data');
const data = await response.json();
if (currentRequestId === requestId) {
// 更新狀態(tài)
}
};
fetchData();
return () => {
requestId = -1;
};
}, [dependency]);- 使用
useState和useRef結(jié)合
通過useRef跟蹤當(dāng)前活躍的請求,并在清理時取消。
useEffect(() => {
const currentRequest = { active: true };
const fetchData = async () => {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
if (currentRequest.active) {
// 更新狀態(tài)
}
};
fetchData();
return () => {
currentRequest.active = false;
};
}, [dependency]);3、關(guān)鍵點總結(jié)
- 使用
AbortController或標(biāo)志變量取消未完成的請求。 - 確保只有最新的請求會更新狀態(tài)。
- 清理函數(shù)是避免競態(tài)條件的核心機制。
- 對于依賴項變化的場景,必須正確處理清理邏輯。
4、什么時候應(yīng)該使用 useCallback 和 useMemo?如果濫用它們會帶來什么后果?
1、useCallback 的使用場景
useCallback 主要用于優(yōu)化性能,避免不必要的函數(shù)重新創(chuàng)建。當(dāng)函數(shù)作為依賴項傳遞給子組件(尤其是通過 React.memo 優(yōu)化的子組件)時,使用 useCallback 可以防止因父組件重新渲染導(dǎo)致子組件不必要的更新。典型場景包括:
- 將函數(shù)作為 props 傳遞給子組件,且子組件依賴 React.memo 進行淺比較優(yōu)化。
- 函數(shù)被用作其他 Hook 的依賴項(如 useEffect、useMemo 等),且需要保持引用穩(wěn)定。
2、useMemo 的使用場景
useMemo 用于緩存昂貴的計算結(jié)果,避免在每次渲染時重復(fù)計算。適用于以下情況:
- 計算成本較高的值(如大型數(shù)組的過濾、排序 或 復(fù)雜數(shù)學(xué)運算)。
- 需要穩(wěn)定引用的 對象 或 數(shù)組(例如作為 useEffect 的依賴項 或 傳遞給子組件的 props)。
- 派生狀態(tài)的生成邏輯復(fù)雜,但依賴項變化頻率較低。
3、濫用 useCallback 和 useMemo 的后果
過度使用這些 Hook 可能導(dǎo)致以下問題:
- 性能反優(yōu)化:每次渲染時額外的內(nèi)存分配和比較依賴項的開銷可能超過其帶來的收益,尤其是在簡單計算或頻繁更新的場景中。
- 代碼可讀性降低:不必要的包裝會增加代碼復(fù)雜度,使邏輯難以追蹤。
- 內(nèi)存泄漏風(fēng)險:長期保留大量緩存可能導(dǎo)致內(nèi)存占用過高,尤其是在緩存大型對象或數(shù)組時。
- 依賴項管理問題:遺漏依賴項 或 錯誤配置可能導(dǎo)致緩存失效或陳舊閉包問題。
4、實際應(yīng)用建議
- 優(yōu)先測量:通過性能分析工具(如 React DevTools)確認是否存在渲染性能問題,再決定是否使用。
- 簡單場景避免使用:對于原生事件處理或簡單計算,直接內(nèi)聯(lián)函數(shù)或值通常更高效。
- 依賴項精確化:確保依賴項數(shù)組包含所有變化會觸發(fā)重新計算的變量,避免遺漏或冗余。
- 權(quán)衡內(nèi)存與計算:在內(nèi)存敏感場景(如移動端)中謹(jǐn)慎使用,避免緩存過多大型數(shù)據(jù)。
5、useRef 有哪些常見的應(yīng)用場景?它和 useState 的根本區(qū)別是什么?
1、useRef 的常見應(yīng)用場景
- 存儲可變值而不觸發(fā)重新渲染
useRef 創(chuàng)建的 ref 對象可以在組件的整個生命周期中持久化存儲可變值,修改其 .current 屬性不會導(dǎo)致組件重新渲染。適用于保存計時器 ID、DOM 節(jié)點引用或任何需要在渲染間保持穩(wěn)定的數(shù)據(jù)。
- 直接操作 DOM 元素
通過將 ref 綁定到 JSX 的 ref 屬性,可以獲取或操作真實的 DOM 節(jié)點。例如自動聚焦輸入框、測量元素尺寸或集成第三方庫(如 D3.js)時直接操作 DOM。
- 緩存昂貴的計算結(jié)果
當(dāng)需要緩存函數(shù)組件內(nèi)的高開銷計算結(jié)果,且不希望因狀態(tài)更新重復(fù)計算時,可用 useRef 保存計算結(jié)果,僅在依賴項變化時重新計算。
- 跟蹤上一次的狀態(tài)或 props
通過結(jié)合 useEffect,可以用 useRef 存儲上一次的狀態(tài)或 props 值,用于比較當(dāng)前和之前的差異。
2、useRef 與 useState 的根本區(qū)別
- 觸發(fā)重新渲染的機制不同
修改 useState 的狀態(tài)值會觸發(fā)組件重新渲染,而修改 useRef 的 .current 屬性不會引起重新渲染。這是兩者最核心的行為差異。
- 數(shù)據(jù)的同步性
useState 的狀態(tài)更新是異步的,React 會批量處理;而 useRef 的 .current 修改是同步的,立即生效。例如在事件處理中直接訪問 .current 會得到最新值。
- 用途的側(cè)重點
useState 用于管理需要觸發(fā) UI 更新的狀態(tài)數(shù)據(jù);useRef 更偏向于存儲與渲染無關(guān)的可變值或直接操作 DOM 的副作用場景。
示例代碼對比
// useState 示例:點擊按鈕會觸發(fā)渲染
const [count, setCount] = useState(0);
const handleClick = () => setCount(count + 1); // 觸發(fā)重新渲染
// useRef 示例:點擊按鈕不會觸發(fā)渲染
const countRef = useRef(0);
const handleClick = () => {
countRef.current += 1; // 不觸發(fā)渲染
console.log(countRef.current);
};6、forwardRef 和 useImperativeHandle 這兩個 Hooks 是為了解決什么特定問題而設(shè)計的?
1、forwardRef 和 useImperativeHandle 的設(shè)計目的
forwardRef 和 useImperativeHandle 是 React 提供的兩個高級 Hooks,主要用于解決父組件需要直接訪問子組件內(nèi)部 DOM 節(jié)點或自定義方法的場景。以下是它們的具體作用:
2、forwardRef 的作用
forwardRef 允許父組件通過 ref 直接獲取子組件的 DOM節(jié)點 或 自定義實例。在 React 中,默認情況下 ref 無法直接透傳到函數(shù)式子組件,因為函數(shù)式組件沒有實例。forwardRef 通過將 ref 作為第二個參數(shù)傳遞,解決了這一問題。
const ChildComponent = forwardRef((props, ref) => {
return <div ref={ref}>子組件內(nèi)容</div>;
});
function ParentComponent() {
const childRef = useRef();
return <ChildComponent ref={childRef} />;
}3、useImperativeHandle 的作用
useImperativeHandle 允許子組件自定義通過 ref 暴露給父組件的屬性或方法。默認情況下,ref 只能獲取 DOM 節(jié)點,但通過 useImperativeHandle,可以暴露子組件的特定功能,避免直接暴露全部內(nèi)部實現(xiàn)。
const ChildComponent = forwardRef((props, ref) => {
const inputRef = useRef();
useImperativeHandle(ref, () => ({
focus: () => inputRef.current.focus(),
}));
return <input ref={inputRef} />;
});
function ParentComponent() {
const childRef = useRef();
const handleClick = () => childRef.current.focus();
return (
<>
<ChildComponent ref={childRef} />
<button onClick={handleClick}>聚焦輸入框</button>
</>
);
}4、解決的問題總結(jié)
- 跨組件傳遞
ref:forwardRef解決了 函數(shù)式組件 無法直接通過ref獲取子組件 DOM節(jié)點的問題。 - 精細化控制暴露內(nèi)容:
useImperativeHandle避免了父組件直接操作子組件的全部內(nèi)部狀態(tài)或方法,僅暴露必要的接口。 - 封裝性:兩者結(jié)合使用可以更好地封裝子組件的實現(xiàn)細節(jié),同時提供必要的交互能力。
7、React 18 新增的 useId 解決了什么問題( SSR 場景下的 ID 沖突、可訪問性問題)?
1、useId 解決的問題
React 18 引入的 useId Hook 主要用于解決以下兩類問題:
- SSR 場景下的 ID 沖突
在服務(wù)器端渲染(SSR)時,組件生成的 ID 可能在客戶端與服務(wù)端不一致,導(dǎo)致 hydration 錯誤。傳統(tǒng)手動生成 ID 的方式(如 Math.random())無法保證跨環(huán)境的一致性,而 useId 通過 React 的內(nèi)部機制確保生成的 ID 在服務(wù)端和客戶端保持一致。
- 可訪問性問題
需要唯一 ID 的場景(如表單元素的 htmlFor 與 id 關(guān)聯(lián)、ARIA 屬性)若未正確處理,可能導(dǎo)致可訪問性工具無法正確解析。useId 生成的穩(wěn)定 ID 能避免此類問題,同時支持跨組件調(diào)用時的唯一性。
2、useId 的核心特性
- 跨環(huán)境一致性
生成的 ID 在 SSR 和客戶端渲染中完全一致,避免 hydration 不匹配錯誤。
- 唯一性保證
同一組件多次調(diào)用 useId 會生成不同的后綴(如 :r1:、:r2:),確保同一組件內(nèi)的多個 ID 不沖突。
- 可預(yù)測的格式
ID 格式為 :r{前綴}:{計數(shù)器},前綴由 React 內(nèi)部管理,避免與其他庫沖突。
3、使用示例
import { useId } from 'react';
function Checkbox() {
const id = useId();
return (
<>
<label htmlFor={id}>Accept terms</label>
<input id={id} type="checkbox" />
</>
);
}4、與傳統(tǒng)方案的對比
| 方案 | 服務(wù)端/客戶端一致性 | 可訪問性支持 | 代碼簡潔性 |
|---|---|---|---|
| useId | ? | ? | ? |
| Math.random | ? | ?? | ? |
| UUID 庫 | ? | ? | ?? |
5、注意事項
- 不適用于列表鍵值:
useId生成的 ID 不適合作為key,列表鍵值應(yīng)來自數(shù)據(jù)本身。 - 前綴自定義:可通過
identifierPrefix選項(如ReactDOMClient.createRoot)設(shè)置全局前綴,避免微前端場景沖突。 - 性能優(yōu)化:ID 生成邏輯輕量,不會引發(fā)額外渲染。
8、useTransition 和 useDeferredValue 是如何優(yōu)化用戶體驗的?它們之間有什么區(qū)別?
1、useTransition 和 useDeferredValue 的作用
useTransition 和 useDeferredValue 是 React 18 引入的并發(fā)特性(Concurrent Features),旨在優(yōu)化用戶界面響應(yīng)速度,減少渲染阻塞帶來的卡頓問題。它們通過將非緊急更新標(biāo)記為“可中斷”,讓高優(yōu)先級交互(如用戶輸入)能夠優(yōu)先處理。
2、useTransition 的優(yōu)化機制
useTransition 允許將狀態(tài)更新標(biāo)記為“過渡”(非緊急),并返回一個isPending標(biāo)志用于界面反饋。適用于需要延遲渲染但需明確控制過渡狀態(tài)的場景。
const [isPending, startTransition] = useTransition();
startTransition(() => {
// 非緊急狀態(tài)更新(如搜索結(jié)果篩選)
setFilter(inputValue);
});優(yōu)化效果:
- 用戶輸入或點擊等高優(yōu)先級操作不會被長任務(wù)阻塞。
isPending可顯示加載狀態(tài)(如骨架屏),避免界面無響應(yīng)。
3、useDeferredValue 的優(yōu)化機制
useDeferredValue 接收一個值并返回其延遲版本,React 會在后臺處理更新。適用于派生狀態(tài)或計算密集型渲染的場景。
const deferredValue = useDeferredValue(value);
// 基于 deferredValue 渲染復(fù)雜組件
return <ExpensiveComponent value={deferredValue} />;優(yōu)化效果:
- 延遲渲染復(fù)雜組件,保持輸入框等高頻操作流暢。
- 自動處理新舊值的過渡,無需手動控制加載狀態(tài)。
4、核心區(qū)別
| 特性 | useTransition | useDeferredValue |
|---|---|---|
| 適用場景 | 明確的狀態(tài)更新(如按鈕點擊) | 派生值或計算密集型渲染 |
| 控制粒度 | 需手動調(diào)用startTransition | 自動延遲值的更新 |
| 反饋機制 | 提供isPending標(biāo)志 | 無直接反饋,依賴新舊值對比 |
| 底層實現(xiàn) | 標(biāo)記更新優(yōu)先級 | 基于useTransition的封裝 |
5、如何選擇?
- 需要明確控制過渡狀態(tài)(如顯示加載動畫):用
useTransition。 - 優(yōu)化派生值的渲染延遲(如大型列表篩選):用
useDeferredValue。 - 兩者可結(jié)合使用:例如用
useTransition處理搜索觸發(fā),用useDeferredValue延遲渲染結(jié)果列表。
9、你能詳細解釋一下 React Hooks 的執(zhí)行順序和依賴規(guī)則嗎?
1、React Hooks 的執(zhí)行順序規(guī)則
- React Hooks 的執(zhí)行順序必須嚴(yán)格保持一致,這是 React 內(nèi)部通過鏈表結(jié)構(gòu)管理 Hook 狀態(tài)的核心機制。每次組件渲染時,Hooks 的調(diào)用順序必須與上一次完全一致。
- 自定義 Hook 內(nèi)部調(diào)用的 Hooks 也會被計入順序。如果在條件語句或循環(huán)中動態(tài)調(diào)用 Hook,會導(dǎo)致順序不一致,觸發(fā) React 的錯誤提示。
2、useEffect 的依賴規(guī)則
- useEffect 的第二個參數(shù)是依賴數(shù)組,用于控制副作用執(zhí)行的時機。當(dāng)依賴數(shù)組中的值發(fā)生變化時,Effect 會重新執(zhí)行。
- 空數(shù)組 [] 表示 Effect 只在組件掛載時執(zhí)行一次。省略依賴數(shù)組會導(dǎo)致 Effect 在每次渲染后都執(zhí)行。依賴項必須包含 Effect 內(nèi)部使用的所有會變化的值,包括 props、state 和 context。
3、useMemo 和 useCallback 的依賴規(guī)則
useMemo 用于記憶計算結(jié)果,只有當(dāng)依賴項變化時才會重新計算。useCallback 用于記憶函數(shù)引用,依賴項變化時會返回新函數(shù)。
過度使用這兩個 Hook 可能導(dǎo)致性能問題而非優(yōu)化。它們適用于計算開銷大或需要穩(wěn)定引用的情況。
4、自定義 Hook 的依賴傳遞
自定義 Hook 內(nèi)部使用的 Hooks 依賴項應(yīng)該暴露給外部組件。這可以通過參數(shù)傳遞實現(xiàn),確保依賴關(guān)系清晰可見。自定義 Hook 的依賴變化會觸發(fā)所有使用該 Hook 的組件更新。
5、Hook 閉包問題
Hooks 經(jīng)常遇到閉包捕獲舊值的問題,特別是在異步操作中??梢酝ㄟ^ useRef 保持可變引用,或確保依賴數(shù)組包含所有變化值來解決。每次渲染都有獨立的 props、state 和 effects,這是故意設(shè)計的行為。
6、多個 Effect 的執(zhí)行順序
同一組件中的多個 useEffect 會按照聲明順序依次執(zhí)行。清理函數(shù)會在組件卸載或依賴變化前執(zhí)行,且執(zhí)行順序與 Effect 相反。LayoutEffect 的觸發(fā)時機比 useEffect 早,會在 DOM 更新后同步執(zhí)行。
到此這篇關(guān)于React Hooks使用實戰(zhàn)深度解析的文章就介紹到這了,更多相關(guān)React Hooks 使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react路由基礎(chǔ)解讀(Router、Link和Route)
這篇文章主要介紹了react路由基礎(chǔ)解讀(Router、Link和Route),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07
React特征學(xué)習(xí)Form數(shù)據(jù)管理示例詳解
這篇文章主要為大家介紹了React特征學(xué)習(xí)Form數(shù)據(jù)管理示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09
利用React Router4實現(xiàn)的服務(wù)端直出渲染(SSR)
這篇文章主要介紹了利用React Router4實現(xiàn)的服務(wù)端直出渲染(SSR),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
React?Hooks--useEffect代替常用生命周期函數(shù)方式
這篇文章主要介紹了React?Hooks--useEffect代替常用生命周期函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09
React-Hook中使用useEffect清除定時器的實現(xiàn)方法
這篇文章主要介紹了React-Hook中useEffect詳解(使用useEffect清除定時器),主要介紹了useEffect的功能以及使用方法,還有如何使用他清除定時器,需要的朋友可以參考下2022-11-11
react?表單數(shù)據(jù)形式配置化設(shè)計
這篇文章主要介紹了react表單數(shù)據(jù)形式配置化設(shè)計,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-07-07
react-redux action傳參及多個state處理的實現(xiàn)
本文主要介紹了react-redux action傳參及多個state處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07

