【发布时间】:2021-03-10 15:12:09
【问题描述】:
我想将eventListener 添加到我的 React 组件中的节点。我正在选择带有useRef 钩子的节点。我是useCallback,因为useRef 在第一次渲染时是null。
const offeringsContainer = useRef(null);
const setOfferingsContainer = useCallback((node) => {
if (node !== null) {
offeringsContainer.current = node;
}
}, []);
我的问题是我的useEffect 对offeringContainer 参考所做的任何更改都没有反应。意思是,offeringContainer.current 是 null。
useEffect(() => {
checkHeaderState();
offeringsContainer.current.addEventListener("wheel", onOfferingsContainerWheel, { passive: false });
}, [offeringsContainer.current]);
这是我的 JSX:
return (
<Fragment>
<div className="card-business-products-services-title-text">
Products & Services
</div>
<div
className="card-business-products-services-container"
id="card-business-products-services-container"
onWheel={onOfferingsContainerWheel}
ref={setOfferingsContainer}
>
{renderOfferings()}
</div>
</Fragment>
);
我知道我做错了什么,但我的 useEffect 挂钩应该监听来自 offeringsContainer.current 的任何更改。
【问题讨论】:
-
您可以简单地在 jsx 中分配 ref:
ref={offeringsContainer},并且由于useEffect在访问offeringsContainer.current的第一个渲染之后运行将返回节点。您还需要将清理调用传递回您的useEffect的返回,以删除侦听器。但更好的是使用onwheel合成事件 -
为什么要给元素分配
onWheel,还要手动添加监听器? -
@pilchard 删除“被动:真”
-
同时分配两个听众,所以选择一个或另一个。
标签: javascript reactjs use-effect usecallback use-ref