Das Electron JS-Ereignis wird mehrmals ausgelöst
In ElectronJS habe ich ein benutzerdefiniertes Anwendungsmenü erstellt, in dem ich das Ereignis vom Hauptprozess an den Renderer-Prozess sende. Jetzt wird dieses Ereignis jedoch mehrmals abgehört. Also, wenn mir jemand helfen könnte, den Fehler zu finden und zu beheben. Vielen Dank. Hier ist mein Code:
label: test,
click: function (item, focusedWindow, event) {
mainWindow.webContents.send('test')
}
ipcRenderer.on('test', (event, action) => {
console.log('called')
})
Jetzt wird dieses console.log mehrmals gedruckt.
Originalcode:
{
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')
})
},
Antworten
ipcRenderer.on hört kontinuierlich zu, während einmal nur für das nächste Ereignis aufgerufen und dann entfernt wird.
ipcRenderer.once(*channel*, *listener*)
Quelle: http://man.hubwiz.com/docset/electron.docset/Contents/Resources/Documents/docs/api/ipc-renderer.html
Nach langem Suchen habe ich die Antwort gefunden. Wenn Sie die Routen wechseln und einige Kanäle auf einer Komponente und einige auf einer anderen registrieren, können Sie die Listener für die bestimmten Kanäle in einer Lebenszyklusmethode (zerstört) entfernen, wenn sich die Komponente befindet unmontiert. Mein Problem war, dass ich zwischen Routen wechselte und jedes Mal, wenn erstellt wurde, einen IPC-Renderer registrierte, um diese Kanäle anzuhören. Also habe ich die Listener zu den Kanälen im zerstörten Lifecycle Hook entfernt.
Dies kann geschehen durch:
ipcrenderer.removeAllListeners ([channel])
Hier ist der Link für Dokumente: Electron