您现在的位置是:网站首页> 编程资料编程资料
浅谈React useDebounce 防抖原理_React_
2023-05-24
382人已围观
简介 浅谈React useDebounce 防抖原理_React_
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( setParam({ ...param, name: evt.target.value }) } /> ) 
到此这篇关于浅谈React useDebounce 防抖原理的文章就介绍到这了,更多相关React useDebounce 防抖内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- el-tree的实现叶子节点单选的示例代码_vue.js_
- vue el-select与el-tree实现支持可搜索树型_vue.js_
- Vue 和 Django 实现 Token 身份验证的流程_vue.js_
- 解决el-tree数据回显时子节点部分选中父节点都全选中的坑_vue.js_
- 利用React实现一个有点意思的电梯小程序_React_
- el-table 行合并的实现示例_vue.js_
- JSON.stringify(递归)与 JSON.parse(有限状态自动机)的实现代码_javascript技巧_
- el-form错误提示信息手动添加和取消的示例代码_vue.js_
- 利用JavaScript实现防抖节流函数的示例代码_javascript技巧_
- 使用 JS 复制页面内容的三种方案_JavaScript_
