淺談React useDebounce 防抖原理
更新時間:2022年08月18日 10:59:00 作者:HHH 917
本文主要介紹了淺談React useDebounce 防抖原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(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ì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實現(xiàn)createElement 和 cloneElement的區(qū)別
本文詳細(xì)介紹了React中React.createElement和React.cloneElement兩種方法的定義、用法、區(qū)別及適用場景,具有一定的參考價值,感興趣的可以了解一下2024-09-09react-native組件中NavigatorIOS和ListView結(jié)合使用的方法
這篇文章主要給大家介紹了關(guān)于react-native組件中NavigatorIOS和ListView結(jié)合使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-09-09