Electron JS 事件多次触发
Electron JS event is firing multiple times
在 electronJS 中,我创建了一个自定义应用程序菜单,我在其中将事件从主进程发送到渲染器进程,但现在发生的情况是我正在收听此事件的地方 运行 多次.所以,如果有人可以帮助我找到并解决错误。谢谢。
这是我的代码:
label: test,
click: function (item, focusedWindow, event) {
mainWindow.webContents.send('test')
}
ipcRenderer.on('test', (event, action) => {
console.log('called')
})
现在这个 console.log 被打印了多次。
原代码:
{
label: constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.LABEL,
accelerator: constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.ACCELERATOR,
click: function (item, focusedWindow, event) {
contents.send(constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.EVENT)
}
}
created: function () {
ipcRenderer.on(constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.EVENT, () => {
console.log('clicked')
})
},
ipcRenderer.on 连续侦听,而只为下一个事件调用一次 - 然后删除。
ipcRenderer.once(*channel*, *listener*)
来源:http://man.hubwiz.com/docset/electron.docset/Contents/Resources/Documents/docs/api/ipc-renderer.html
所以经过大量搜索后,我发现 answer.If 你正在切换路由并在一个组件上注册了一些通道,在另一个组件上注册了一些通道,因此你可以在生命周期方法中删除特定通道的监听器(销毁)当组件被卸载时。我的问题是我在路由之间切换,每次创建时都是 运行,我在其中注册了 ipc 渲染器来收听这些频道。
所以我在 destroyed lifecycle hook 中删除了通道的监听器。
可以通过以下方式完成:
ipcrenderer.removeAllListeners([频道])
这是文档的 link:Electron
尝试在关闭的 window 函数中使用 ipc.removeAllListeners('your_name_channel')
:
Your_Window.on('closed',()=>{
ipc.removeAllListeners('your_name_channel');
})
在 electronJS 中,我创建了一个自定义应用程序菜单,我在其中将事件从主进程发送到渲染器进程,但现在发生的情况是我正在收听此事件的地方 运行 多次.所以,如果有人可以帮助我找到并解决错误。谢谢。 这是我的代码:
label: test,
click: function (item, focusedWindow, event) {
mainWindow.webContents.send('test')
}
ipcRenderer.on('test', (event, action) => {
console.log('called')
})
现在这个 console.log 被打印了多次。
原代码:
{
label: constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.LABEL,
accelerator: constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.ACCELERATOR,
click: function (item, focusedWindow, event) {
contents.send(constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.EVENT)
}
}
created: function () {
ipcRenderer.on(constants.APPLICATION_MENU.ARTICLE.MENU.KEYWORD.EVENT, () => {
console.log('clicked')
})
},
ipcRenderer.on 连续侦听,而只为下一个事件调用一次 - 然后删除。
ipcRenderer.once(*channel*, *listener*)
来源:http://man.hubwiz.com/docset/electron.docset/Contents/Resources/Documents/docs/api/ipc-renderer.html
所以经过大量搜索后,我发现 answer.If 你正在切换路由并在一个组件上注册了一些通道,在另一个组件上注册了一些通道,因此你可以在生命周期方法中删除特定通道的监听器(销毁)当组件被卸载时。我的问题是我在路由之间切换,每次创建时都是 运行,我在其中注册了 ipc 渲染器来收听这些频道。 所以我在 destroyed lifecycle hook 中删除了通道的监听器。
可以通过以下方式完成:
ipcrenderer.removeAllListeners([频道])
这是文档的 link:Electron
尝试在关闭的 window 函数中使用 ipc.removeAllListeners('your_name_channel')
:
Your_Window.on('closed',()=>{
ipc.removeAllListeners('your_name_channel');
})