目录
- 1、js防抖
- 2、React custom Hook useDebounce
1、js防抖
// func 需要去抖动的函数 delay 延时执行时间 const debounce = (func, delay) => { let timeout; //...param es6语法 获取形参数组 argaments return (...param) => { // 每次 进入清除上一个已经执行/未执行的定时器 if (timeout) { clearTimeout(timeout); } //定时器 delay 时间后执行 func函数 timeout = setTimeout(() => { func(...param); }, delay) } } // 使用 const logPrint= debounce(() =>console.log('打印执行'),2000) logPrint(); // logPrint(); // logPrint(); // logPrint(); // 打印执行
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变化以后,设置一个定时器 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('打印执行',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 }) } /> )
到此这篇关于浅谈React useDebounce 防抖原理的文章就介绍到这了,更多相关React useDebounce 防抖内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)