Memory leak when emitting an event after menu click in Electron app(在电子应用程序中单击菜单后发出事件时发生内存泄漏)
问题描述
我当前正在使用Electron and Reaction构建桌面应用程序。 现在我正在添加一个菜单功能,用于切换应用程序的黑暗模式。在我的Reaction应用程序中,我使用了一个切换黑暗模式的钩子。我希望在用户单击菜单项后立即触发该反应挂钩。
这是我到目前为止所做的工作:
菜单:
buildDefaultTemplate() {
const templateDefault = [
{
label: '&File',
submenu: [
{
label: '&Open',
accelerator: 'Ctrl+O',
},
{
label: '&Toggle Dark Mode',
accelerator: 'Ctrl+T',
click: () => {
this.mainWindow.webContents.send('toggle-dark-mode', {
message: 'Toggle successful!',
});
},
},
{
label: '&Close',
accelerator: 'Ctrl+W',
click: () => {
this.mainWindow.close();
},
},
],
},
]
Dashboard.tsx:
export default function Dashboard(): ReactElement {
const { username } = os.userInfo();
const { toggleColorMode } = useColorMode();
useEffect(() => {
ipcRenderer.on('toggle-dark-mode', () => {
toggleColorMode();
});
}, [toggleColorMode]);
切换它可以很好地工作。但是在多次重复该操作之后,我收到以下警告:MaxListenersExceededWarning:检测到可能的EventEmitter内存泄漏。11切换暗模式监听程序添加到[EventEmitter]。使用emitter.setMaxListeners()增加限制
我看到过类似的帖子,但答案并不令人满意。他们的建议是简单地停止听事件,我认为这在我的情况下是困难的。
我正在寻找在切换成功后取消订阅活动的方法。
推荐答案
在启动电子应用时尝试设置一次toggle-dark-mode
事件处理程序。
您的代码甚至不需要在ready
事件中。
这篇关于在电子应用程序中单击菜单后发出事件时发生内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在电子应用程序中单击菜单后发出事件时发生内存泄漏
基础教程推荐
- 响应更改 div 大小保持纵横比 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 动态更新多个选择框 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01