淺談React useDebounce 防抖原理
1、js防抖
// func 需要去抖動的函數(shù) delay 延時執(zhí)行時間
const debounce = (func, delay) => {
let timeout;
//...param es6語法 獲取形參數(shù)組 argaments
return (...param) => {
// 每次 進(jìn)入清除上一個已經(jīng)執(zhí)行/未執(zhí)行的定時器
if (timeout) {
clearTimeout(timeout);
}
//定時器 delay 時間后執(zhí)行 func函數(shù)
timeout = setTimeout(() => {
func(...param);
}, delay)
}
}
// 使用
const logPrint= debounce(() =>console.log('打印執(zhí)行'),2000)
logPrint(); //
logPrint(); //
logPrint(); //
logPrint(); // 打印執(zhí)行

2、React custom Hook useDebounce
useDebounce
useDebounce 搭配 useEffect useState 的使用
index.js
//utils/index.js
import { useEffect, useState } from 'react';
export const useDebounce = (value, delay) => {
const [deouncedValue, setDebuouncedValue] = useState(value)
useEffect(() => {
//每次在value變化以后,設(shè)置一個定時器
const timeout = setTimeout(() => setDebuouncedValue(value), delay)
//每次在上一個useEffect處理完以后再運行
return () => clearTimeout(timeout)
}, [value, delay])
return deouncedValue
}
index.jsx
//使用 index.jsx
import { useDebounce } from 'utils';
......
const [param, setParam] = useState({
name: '',
personId: ''
});
const debounceParam = useDebounce(param, 2000);
useEffect(() => {
console.log('打印執(zhí)行',debounceParam);
// fetch(`${apiUrl}/projects?${qs.stringify(cleanObject(debounceParam))}`).then(async response => {
// if (response.ok) {
// setList(await response.json());
// }
}, [debounceParam]);
return(
<input
type="text"
value={param.name}
onChange={evt =>
setParam({
...param,
name: evt.target.value
})
}
/>
)

到此這篇關(guān)于淺談React useDebounce 防抖原理的文章就介紹到這了,更多相關(guān)React useDebounce 防抖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
react中使用redux-persist做持久化儲存的過程記錄
這篇文章主要介紹了react中使用redux-persist做持久化儲存的相關(guān)資料,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01
react中使用js實現(xiàn)頁面滾動監(jiān)聽(推薦)
這篇文章主要介紹了react中使用js實現(xiàn)頁面滾動監(jiān)聽,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
React進(jìn)階學(xué)習(xí)之組件的解耦之道
這篇文章主要給大家介紹了關(guān)于React進(jìn)階之組件的解耦之道,文中通過詳細(xì)的示例代碼給大家介紹了組件分割與解耦的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
React-Router v6實現(xiàn)頁面級按鈕權(quán)限示例詳解
這篇文章主要介紹了使用 reac+reactRouter來實現(xiàn)頁面級的按鈕權(quán)限功能,這篇文章分三部分,實現(xiàn)思路、代碼實現(xiàn)、踩坑記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助2023-10-10
詳解React Native開源時間日期選擇器組件(react-native-datetime)
本篇文章主要介紹了詳解React Native開源時間日期選擇器組件(react-native-datetime),具有一定的參考價值,有興趣的可以了解一下2017-09-09
react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法
這篇文章主要介紹了react quill中圖片上傳由默認(rèn)轉(zhuǎn)成base64改成上傳到服務(wù)器的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

