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
事件中。
这篇关于在电子应用程序中单击菜单后发出事件时发生内存泄漏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在电子应用程序中单击菜单后发出事件时发生内存泄漏


- 为什么我的页面无法在 Github 上加载? 2022-01-01
- 从原点悬停时触发 translateY() 2022-01-01
- 使用 iframe URL 的 jQuery UI 对话框 2022-01-01
- 我不能使用 json 使用 react 向我的 web api 发出 Post 请求 2022-01-01
- 如何调试 CSS/Javascript 悬停问题 2022-01-01
- 如何显示带有换行符的文本标签? 2022-01-01
- 为什么悬停在委托事件处理程序中不起作用? 2022-01-01
- 在不使用循环的情况下查找数字数组中的一项 2022-01-01
- 是否可以将标志传递给 Gulp 以使其以不同的方式 2022-01-01
- 如何向 ipc 渲染器发送添加回调 2022-01-01