如何解决useDebounce Hook 不允许我输入
我正在尝试制作一个简单的去抖动钩子(从视频中实现)并在上下文中使用它,但它不起作用。更有趣的是,它不允许我在输入中输入任何内容。我将处理函数和状态存储在 Context 中,并将必要的东西传递给子组件。
useDebounce.js
import { useState } from 'react';
export default function useDebounce() {
const [typingTimeout,setTypingTimeout] = useState('');
function debounce(func,wait) {
clearTimeout(typingTimeout);
const timeout = setTimeout(() => {
func();
},wait);
setTypingTimeout(timeout);
}
return debounce;
}
上下文 API
const [text,setText] = useState('');
const debounce = useDebounce();
const handleSearch = e => {
if (e.target.value === '' || e.target.value.match(/^[0-9]+$/)) {
debounce(() => setText(e.target.value),1000);
}
};
解决方法
问题出在这一行。执行超时时,e.target.value
为空/未定义。状态更新是异步过程,这里的事件参数是 Synthetic Event
和 pooled(仅与 React 相关)。这意味着 SyntheticEvent 对象将被重用,并且在调用事件处理程序后所有属性都将被取消。
debounce(() => setText(e.target.value),1000);
超时内的这部分 setText(e.target.value)
不起作用:
改为:
const value = e.target.value; //--> store the value
debounce(() => setText(value),1000);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。