当前位置: 代码网 > it编程>编程语言>Javascript > react组件中debounce防抖功能失效问题解决办法

react组件中debounce防抖功能失效问题解决办法

2024年10月28日 Javascript 我要评论
一、问题背景import { debounce } from 'lodash'; const [searchkey, setsearchkey] = usestate('');// 防抖函数 co

一、问题背景

import { debounce } from 'lodash';  
const [searchkey, setsearchkey] = usestate('');
// 防抖函数
  const debouncelist = debounce(getlist, 500);
<input
   value={searchkey}
   onchange={(e) => {
              setsearchkey(e.target.value);
             }}
   classname={`${style.search}`}
   placeholder="请输入关键词"
/>

页面上有一个搜索框,searchkey是通过usestate定义的响应式数据,onchange事件调用了setsearchkey方法,那么只要输入变化时,组件就会重新渲染从而重新生成新的防抖函数debouncelist。最终造成防抖功能失效。

二、解决办法

使用 useref 定义searchkey数据,使其成为非响应式数据,通过 searchkey.current 获取和修改值:

// 搜索关键字
  const searchkey = useref('');
// 修改数据
const setsearchkey = (val) => {
    searchkey.current = val;
  };
<input
   onchange={(e) => {
              setsearchkey(e.target.value);
             }}
   classname={`${style.search}`}
   placeholder="请输入关键词"
/>

三、拓展

关于处理防抖失效的问题,可能有人会想到使用 usecallback 来缓存 debounce 防抖函数,比如你可能会这样写:

const [searchkey, setsearchkey] = usestate('');
const debouncelist = usecallback(debounce(getlist, 500), []);

这样防抖功能虽然生效了,但是你无法获取最新的searchkey值;如果想获取最新的searchkey值,就要把searchkey加到后面的 [ ] 中,但是这样防抖又失效了。所以只能采用useref 定义非响应式数据来解决。

到此这篇关于react组件中debounce防抖功能失效的文章就介绍到这了,更多相关react组件debounce防抖内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com