1

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

},

4

3 回答 3

2

因此,经过大量搜索后,我找到了答案。如果您正在切换路由并在一个组件上注册了一些通道,而在另一个组件上注册了一些通道,那么您可以在组件被销毁时在生命周期方法中删除特定通道的侦听器卸载。我的问题是我在路由之间切换,每次创建都在运行,我注册了 ipc 渲染器来收听这些频道。所以我在销毁的生命周期钩子中删除了频道的监听器。

可以通过以下方式完成:

ipcrenderer.removeAllListeners([频道])

这是文档的链接:Electron

于 2020-09-18T22:49:20.887 回答
1

尝试ipc.removeAllListeners('your_name_channel')在您的关闭窗口功能中使用:

Your_Window.on('closed',()=>{
    ipc.removeAllListeners('your_name_channel');
})
于 2021-12-05T17:33:53.550 回答
0

ipcRenderer.on 持续监听,而一次只为下一个事件调用 - 然后被删除。

ipcRenderer.once(*channel*, *listener*)

来源: http: //man.hubwiz.com/docset/electron.docset/Contents/Resources/Documents/docs/api/ipc-renderer.html

于 2020-09-15T16:32:30.060 回答