如何解决电子JS事件多次触发
在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,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
,因此,经过大量搜索,我找到了答案。如果您要切换路线并在一个组件上注册了某些通道,而在另一个组件上注册了某些通道,那么您可以在生命周期方法(销毁)中删除特定通道的侦听器,当组件已卸载。我的问题是我在路由之间切换,并且每次创建的运行时我都在其中注册ipc渲染器以收听那些频道。 因此,我将监听器移到了已损坏的生命周期挂钩中。
可以通过以下方式完成:
ipcrenderer.removeAllListeners([channel])
以下是文档的链接:Electron
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。