为什么 lodash throttle 在 useWindowSize 自定义挂钩中不起作用?
Why does lodash throttle not work within the useWindowSize custom hooks?
我正在尝试将调整大小事件与节流阀一起使用。但是,它不起作用。我尝试按如下方式调试它:
import {throttle} from 'lodash'
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined,
})
const handleResize = () => {
// handle resize code....
}
const onWindowResize = () => {
console.log('Throttle') // <-- this does print out
throttle(() => {
console.log('bam') // <-- this doesn't print out
}, 100)
}
useEventListener('resize', onWindowResize)
return windowSize
}
从上面的代码可以看出,在使用 lodash
中的 throttle
函数之前,我一直在尝试注销。它确实会打印出来,但 throttle
本身的日志不会。任何人都知道为什么会这样以及如何解决这个问题?
我一直在尝试解决这个问题和类似的问题,因为以下代码对我有用:
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined,
})
const handleResize = useCallback(() => {
console.log('handleResize') // It does log this out
// handle the resize...
}, [windowSize])
useEventListener('resize', throttle(handleResize, 4000)) // call it here instead
return windowSize
}
您的内联函数在每次渲染时都重新生成。只需确保油门功能与下一次渲染时的功能相同即可。您可以使用 useCallback 钩子。
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined
});
const someFunction = (e) => {
console.log("bam", e); //
};
const throttleFn = useCallback(throttle(someFunction, 1000), []);
const onWindowResize = (e) => {
console.log("Throttle", e);
throttleFn(e);
};
useEventListener("resize", onWindowResize);
return windowSize;
}
我正在尝试将调整大小事件与节流阀一起使用。但是,它不起作用。我尝试按如下方式调试它:
import {throttle} from 'lodash'
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined,
})
const handleResize = () => {
// handle resize code....
}
const onWindowResize = () => {
console.log('Throttle') // <-- this does print out
throttle(() => {
console.log('bam') // <-- this doesn't print out
}, 100)
}
useEventListener('resize', onWindowResize)
return windowSize
}
从上面的代码可以看出,在使用 lodash
中的 throttle
函数之前,我一直在尝试注销。它确实会打印出来,但 throttle
本身的日志不会。任何人都知道为什么会这样以及如何解决这个问题?
我一直在尝试解决这个问题和类似的问题,因为以下代码对我有用:
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined,
})
const handleResize = useCallback(() => {
console.log('handleResize') // It does log this out
// handle the resize...
}, [windowSize])
useEventListener('resize', throttle(handleResize, 4000)) // call it here instead
return windowSize
}
您的内联函数在每次渲染时都重新生成。只需确保油门功能与下一次渲染时的功能相同即可。您可以使用 useCallback 钩子。
export function useWindowSize() {
const [windowSize, setWindowSize] = useState({
width: undefined,
height: undefined
});
const someFunction = (e) => {
console.log("bam", e); //
};
const throttleFn = useCallback(throttle(someFunction, 1000), []);
const onWindowResize = (e) => {
console.log("Throttle", e);
throttleFn(e);
};
useEventListener("resize", onWindowResize);
return windowSize;
}