【发布时间】:2021-04-03 22:44:40
【问题描述】:
我将useRef 用于addEventListener 但不起作用,这里有什么问题吗?
父组件:
const parent = () => {
const el = useRef()
const element = el.current && el.current
useEffect(() => {
if (element) {
const scrollHandler = e => {
console.log(e);
};
element.addEventListener("scroll", scrollHandler);
return () => {
element.removeEventListener("scroll", scrollHandler);
};
}
}, [element]);
return (
<Child ref={el} />
)
}
子组件:
const child = React.forwardRef((props, ref) => {
return (
<div ref={ref}>something...</div>
)
})
【问题讨论】:
-
要使
scroll事件起作用,Child组件的内容需要有足够的高度使网页可以滚动。尝试在Child组件中的div元素上设置200vh高度。然后您将看到scroll事件正常运行。 -
Useref 不会触发重新渲染,并在 useEffect 之前绑定 ref 对象。只需使用不带元素的 el.current。
-
stackoverflow.com/users/6094348/yousaf 是的,你是对的,我有足够的滚动元素,但仍然无法使用
-
stackoverflow.com/users/6165701/cenk-%c3%87etinkaya按照你说的做了,还是不行。
-
这里是the working demo。要使
scroll事件作用于一个元素,该元素应该是可滚动的,并且您需要在useEffect挂钩中使用el.current而不是element。
标签: reactjs use-effect use-ref