reactjs - React 中的 Chrome 扩展事件处理程序
问题描述
我目前正在尝试构建 Chrome 扩展程序。为此,我使用了一个反应应用程序。所有的渲染和东西都在工作。问题是 chrome 事件处理程序。
在我的反应应用程序中,我有一个上下文。
在这个上下文中是一个useEffect
钩子,我在其中注册事件:
useEffect(() => {
chrome.tabs.onUpdated.addListener(myListener)
}, []);
侦听器函数使用useState
上下文中的变量,因此每次这些变量更改时我都必须更新侦听器。
当然有removeEventListener
函数,但是当我调用它时,它什么也没做,因为函数已经改变了,因此Chrome认为没有注册这样的监听器。
有谁知道如何删除旧听众或清除所有听众?
解决方案
解决方案代码片段:
const handlerRef = useRef();
useEffect(() => {
if(handlerRef.current){
chrome.yourField.yourUpdate.removeListener(handlerRef.current);
}
chrome.yourField.yourUpdate.addListener(handler);
}, [yourDependencies]);
useEffect(() => {
handlerRef.current = handler;
});
感谢@wOxxOm!
推荐阅读
- libcurl - 如何使用 libcurl REST API 进行基于 cookie 的身份验证?
- perl - 使用 NonStop 调试器选项时如何将 perl 脚本的调试跟踪重定向到文件?
- c++ - POD 和非 POD 类之间的性能差异
- swift - 如何写下缩短的 if 条件?
- git - 克隆更新的存储库?
- javascript - getElementsByClassName 在条件下不起作用
- netsuite - Netsuite 2.0 Rest API 调用在获取自定义段字段时出错
- java - ResultSet 已关闭,仅打印第一个“SUBKATEGORI”
- google-app-engine - 允许 Cloud NAT 与 App Engine 防火墙通信
- ios - 从 XIB 加载视图作为滚动视图的子视图