【发布时间】:2023-02-26 04:47:53
【问题描述】:
我正在寻找一些指导。
我有一个 React 应用程序,其中有多个组件 (10-20) 需要在鼠标位置发生变化时执行操作。
目前我在父组件中有一个鼠标移动事件侦听器,它将鼠标位置存储在状态变量中并将其传递给道具中的子组件。在子组件中,useEffect 在更改时会触发一些操作。然而,这似乎不是最佳方法,因为 ESLint 会触发eslint react-hooks/exhaustive-deps 警告,这意味着 useEffect 可能不适用于这种用法。
简化设置:
const ParentComponent = () => {
const [position, setPosition] = useState({x: 0, y: 0});
useEffect(() => {
const throttleMouseMove = throttle((event: any) => {
setPosition({x: event.clientX, y: event.clientY});
}, 50);
window.addEventListener("mousemove", throttleMouseMove);
return () => {
window.removeEventListener("mousemove", throttleMouseMove);
};
}, []);
return (
<ChildComponent mousePosition={position} />
)
};
.
const ChildComponent = (props) => {
useEffect(() => {
// Do something
}, [props.mousePosition]);
}
我考虑过将鼠标移动事件侦听器添加到需要对此进行操作的所有组件。但是多个事件监听器会影响性能吗?特别是鼠标移动侦听器,因为它经常触发 - 即使我限制了它。
有第三种选择吗?
希望有人可以提供一些指导。
【问题讨论】:
标签: reactjs react-hooks event-listener