【问题标题】:Chrome-Extension eventHandler in ReactReact 中的 Chrome 扩展事件处理程序
【发布时间】:2020-05-05 11:22:37
【问题描述】:

我目前正在尝试构建一个 Chrome 扩展程序。为此,我使用了一个反应应用程序。所有的渲染和东西都在工作。问题在于 chrome 事件处理程序。

在我的反应应用程序中,我有一个上下文。

在这个上下文中是一个useEffect 钩子,我在其中注册事件:

useEffect(() => {
  chrome.tabs.onUpdated.addListener(myListener)
}, []);

侦听器函数在上下文中使用来自useState 的变量,因此每次这些变量更改时我都必须更新侦听器。

当然有removeEventListener函数,但是当我调用它时,它什么也没做,因为函数已经改变了,因此Chrome认为没有注册这样的监听器。

有谁知道如何删除旧的侦听器或清除所有侦听器?

【问题讨论】:

  • 只需将旧函数引用存储在单独的变量中。
  • 谢谢。你能把它的代码sn-p发给我吗?
  • 我想我已经做到了你的意思。很快就会发布答案。

标签: reactjs google-chrome google-chrome-extension event-handling dom-events


【解决方案1】:

解决方案代码sn-p:

const handlerRef = useRef();
useEffect(() => {
    if(handlerRef.current){
        chrome.yourField.yourUpdate.removeListener(handlerRef.current);
    }
    chrome.yourField.yourUpdate.addListener(handler);
}, [yourDependencies]);
useEffect(() => {
     handlerRef.current = handler;
});

感谢@wOxxOm!

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2016-09-12
    • 2018-01-25
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多