Reputation: 238
In electronJS, I have created a custom application menu in which I'm sending the event from main process to renderer process, but now what happening is where I'm listening this event is running multiple times. So, if anyone could help me to find and resolve the error. Thanks. Here's my code:
label: test,
click: function (item, focusedWindow, event) {
mainWindow.webContents.send('test')
}
ipcRenderer.on('test', (event, action) => {
console.log('called')
})
Now this console.log is printed multiple times.
original code:
{
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')
})
},
Upvotes: 1
Views: 3388
Reputation: 36
Try using ipc.removeAllListeners('your_name_channel')
in your closed window function:
Your_Window.on('closed',()=>{
ipc.removeAllListeners('your_name_channel');
})
Upvotes: 2
Reputation: 238
So after a lot of searching I found the answer.If you are switching the routes and registered some channels on one component and some on other, So you can remove the listeners for the particular channels in a lifecycle method(destroyed) when the component is unmounted. My issue was I was switching between routes and every time created was running in which I registered ipc renderer to listen to those channels. So i removed the listeners to the channels in destroyed lifecycle hook.
It can be done by:
ipcrenderer.removeAllListeners([channel])
Here's is the link for docs: Electron
Upvotes: 3
Reputation: 3
ipcRenderer.on continuously listens, while once is only invoked for the next event - then removed.
ipcRenderer.once(*channel*, *listener*)
Source: http://man.hubwiz.com/docset/electron.docset/Contents/Resources/Documents/docs/api/ipc-renderer.html
Upvotes: 0