【发布时间】:2021-08-19 22:01:58
【问题描述】:
当来自输入字段的搜索查询参数发生更改时,我需要发出 api 请求,但前提是该字段不为空。
我正在测试这个网站上找到的几个答案,但无法让它们工作
首先是this 一个带有自定义挂钩的
export function useDebounce(value, delay) {
const [debouncedValue, setDebouncedValue] = useState(value);
useEffect(() => {
const handler = setTimeout(() => {
setDebouncedValue(value);
}, delay);
return () => clearTimeout(handler);
}, [value, delay]);
return debouncedValue;
}
现在在我的组件中我这样做
const debouncedTest = useDebounce(() => {console.log("something")}, 1000);
但这似乎在每次重新渲染时都会被调用,而不管任何参数,我需要能够在 useEffect 中调用它,就像这样
useEffect(() => {
if (query) {
useDebounce(() => {console.log("something")}, 1000);
} else {
//...
}
}, [query]);
这当然行不通
使用 lodash 的另一种方法
const throttledTest = useRef(throttle(() => {
console.log("test");
}, 1000, {leading: false}))
但是我如何从上面的 useEffect 触发呢?我不明白如何进行这项工作
谢谢
【问题讨论】:
-
你能解释一下你想从这个去抖动中得到什么吗? api调用太快或按钮被点击太多次?有什么问题。首先确保您有一个带有
debounce的工作代码。这样我们可以帮助你添加它。
标签: reactjs react-hooks throttling