使用 useRef addEventListener
Using useRef addEventListener
我正在为 addEventListener
使用 useRef
但不起作用,这里有什么问题吗?
父组件:
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>
)
})
将您的父组件更改为此以避免得到 stale state
:
const parent = () => {
const el = useRef();
useEffect(() => {
if (el.current) {
const scrollHandler = (e) => {
console.log(e);
};
el.current.addEventListener("scroll", scrollHandler);
return () => {
el.current.removeEventListener("scroll", scrollHandler);
};
}
}, [el.current]);
return <Child ref={el} />;
};
我正在为 addEventListener
使用 useRef
但不起作用,这里有什么问题吗?
父组件:
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>
)
})
将您的父组件更改为此以避免得到 stale state
:
const parent = () => {
const el = useRef();
useEffect(() => {
if (el.current) {
const scrollHandler = (e) => {
console.log(e);
};
el.current.addEventListener("scroll", scrollHandler);
return () => {
el.current.removeEventListener("scroll", scrollHandler);
};
}
}, [el.current]);
return <Child ref={el} />;
};