【发布时间】:2021-12-19 07:02:27
【问题描述】:
我有一个自定义元素,它在反应中调度一个自定义事件。
由于没有办法简单的绑定事件,我需要手动创建一个eventListener并移除它。
我试过了:
export function App() {
const textRef = useRef<DemoTextElement>(null);
let eventRef;
const logEvent = (e) => {
console.log(e)
}
useEffect(() => {
if(textRef.current) {
eventRef = textRef.current;
textRef.current.addEventListener('onCustomEvent', logEvent)
}
return () => {
if(eventRef) {
eventRef.removeEventListener('onCustomEvent', logEvent)
}
}
}, [])
return (
<div className={styles.app}>
<demo-text ref={textRef}/>
</div>
);
}
但我收到提示
从 React Hook useEffect 内部对 'eventRef' 变量的分配将在每次渲染后丢失。要随着时间的推移保留该值,请将其存储在 useRef Hook 中,并将可变值保留在 '.current' 属性中。否则,您可以直接在 useEffect 中移动此变量。
但我已经在使用 useRef 钩子了,所以我不知道如何解决这个问题...因为我无法在 useEffect 钩子中添加 useRef 钩子。
【问题讨论】:
-
您能否澄清一下您在哪里声明
counter参考?请编辑示例 -
@RamanNikitsenka 很抱歉我复制时打错了
-
你可以参考useCallBack hook。
-
这将如何改变?它引发了同样的问题。
-
似乎,您不需要使用额外的变量 eventRef。在清理函数中使用
textRef.current.removeEventListener
标签: reactjs typescript react-hooks eslint