如何限制 React 功能组件中的 onWheel 事件
How to throttle onWheel events in a React functional component
我有这个 Reactemphasized text 组件,我想在 wheel 事件发生时做一些事情。但我也想限制车轮事件并确保只有一个事件会触发该功能两秒钟。我正在使用 lodash 库中的 throttle 函数。
但是,它仍然会触发很多事件,并且所有事件都会被执行。我认为原因是每个车轮事件都会产生一个独特的节流函数。但我不知道如何解决问题并使其按预期工作。谁能给我提供任何可能的解决方案?
如有任何意见,我们将不胜感激。
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
<div className="name" onWheel={_.throttle(onWheel, 2000)} >
您可以将 useMemo
与空的依赖项数组一起使用,这样 _.throttle
只会在挂载时调用一次:
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
const onWheelThrottled = useMemo(() => _.throttle(onWheel, 2000), []);
<div className="name" onWheel={onWheelThrottled} >
实时片段:
console.error = () => void 0;
const App = () => {
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
const onWheelThrottled = React.useMemo(() => _.throttle(onWheel, 2000), []);
return <div className="name" onWheel={onWheelThrottled} />
};
ReactDOM.render(<App />, document.querySelector('.react'));
.name {
height: 3000px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div class="react"></div>
我有这个 Reactemphasized text 组件,我想在 wheel 事件发生时做一些事情。但我也想限制车轮事件并确保只有一个事件会触发该功能两秒钟。我正在使用 lodash 库中的 throttle 函数。
但是,它仍然会触发很多事件,并且所有事件都会被执行。我认为原因是每个车轮事件都会产生一个独特的节流函数。但我不知道如何解决问题并使其按预期工作。谁能给我提供任何可能的解决方案?
如有任何意见,我们将不胜感激。
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
<div className="name" onWheel={_.throttle(onWheel, 2000)} >
您可以将 useMemo
与空的依赖项数组一起使用,这样 _.throttle
只会在挂载时调用一次:
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
const onWheelThrottled = useMemo(() => _.throttle(onWheel, 2000), []);
<div className="name" onWheel={onWheelThrottled} >
实时片段:
console.error = () => void 0;
const App = () => {
const changePage = (direction) => {
if (direction > 0) {
console.log("scroll down");
} else {
console.log("scroll up");
}
};
const onWheel = (event) => {
changePage(event.deltaY);
};
const onWheelThrottled = React.useMemo(() => _.throttle(onWheel, 2000), []);
return <div className="name" onWheel={onWheelThrottled} />
};
ReactDOM.render(<App />, document.querySelector('.react'));
.name {
height: 3000px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js"></script>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div class="react"></div>