以下为ChatGPT自动生成的解答,正确与否请自行判断。
BFE.devAI解答 - React 代码题
8. useDebounce()
需要实现一个自定义的Hooks useDebounce()
,用于对频繁更改的值进行防抖。
防抖就是在指定时间内,如果有多个连续的事件,只会执行一次。例如,在文本输入框中输入时,用户可能会连续敲击键盘,但应该只有输入完成后一段时间内最后一次输入才被提交处理。
代码实现如下:
import { useState, useEffect } from 'react'
function useDebounce(value: any, delay: number) {
const [debouncedValue, setDebouncedValue] = useState(value)
useEffect(() => {
const timer = setTimeout(() => {
setDebouncedValue(value)
}, delay)
return () => {
clearTimeout(timer)
}
}, [value, delay])
return debouncedValue
}
function App() {
const [value, setValue] = useState(...)
// 防抖后的值将在1秒后更新
const debouncedValue = useDebounce(value, 1000)
// 使用debouncedValue来处理其他逻辑
// ...
return ...
}
在 useDebounce()
中,我们使用了 useState()
来保存防抖后的值 debouncedValue
。当value改变时,会启动一个 setTimeout()
定时器,在 delay
毫秒后执行更新 debouncedValue
的操作。返回 debouncedValue
用于在其他逻辑中使用。
在组件中,我们可以直接使用自定义的Hooks,得到防抖后的值,然后用这个值来处理其他逻辑,完成防抖的效果。