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');
})