Abhishek Matta
Abhishek Matta

Reputation: 238

Electron JS event is firing multiple times

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

Answers (3)

Try using ipc.removeAllListeners('your_name_channel') in your closed window function:

Your_Window.on('closed',()=>{
    ipc.removeAllListeners('your_name_channel');
})

Upvotes: 2

Abhishek Matta
Abhishek Matta

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

ALW
ALW

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

Related Questions