淺談React useDebounce 防抖原理
更新時間:2022年08月18日 10:59:00 作者:HHH 917
本文主要介紹了淺談React useDebounce 防抖原理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
1、js防抖
// func 需要去抖動的函數(shù) delay 延時執(zhí)行時間
const debounce = (func, delay) => {
let timeout;
//...param es6語法 獲取形參數(shù)組 argaments
return (...param) => {
// 每次 進入清除上一個已經(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實現(xiàn)createElement 和 cloneElement的區(qū)別
本文詳細介紹了React中React.createElement和React.cloneElement兩種方法的定義、用法、區(qū)別及適用場景,具有一定的參考價值,感興趣的可以了解一下2024-09-09
react-native組件中NavigatorIOS和ListView結(jié)合使用的方法
這篇文章主要給大家介紹了關(guān)于react-native組件中NavigatorIOS和ListView結(jié)合使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-09-09

