我有一个 Electron 应用程序,在渲染器进程 ReactJs 和 Redux 基础设施上连接并同步应用程序所有打开进程(一个主进程和多个渲染器进程)中的所有商店
Redux 同步通信是通过电子 IPC 实现的,所以我有几个不同通道的监听器,这些监听器是在每个渲染器进程(浏览器窗口)中添加的
例如,这里是监听从主进程分派的动作的代码:
export const listenToFromMainDispatchedActions = (store: Store, senderId: string): () => void => {
const listener = (event: IpcRendererEvent, args: any): void => {
if (!isValidAppAction(args)) {
appLogger.warn('Received an invalid action form main!!!');
} else {
const action: IAppReduxAction<any> = {
...args,
meta: {
...args.meta,
handler: ReduxActionHandler.RECEIVER,
},
};
if (action.meta.senderId !== senderId) store.dispatch(action);
}
};
ipcRenderer.on(IPCChannels.ACTION_DISPATCH, listener);
appLogger.warn('STORE_DISPATCH', 'ADDED ACTION_DISPATCH');
return (): void => {
ipcRenderer.removeListener(IPCChannels.ACTION_DISPATCH, listener);
appLogger.warn('STORE_DISPATCH', 'REMOVED ACTION_DISPATCH');
};
};
这段代码在我的index.tsx文件中执行如下:
// index.tsx
// ...
export const GLOBAL_SENDER_ID = uuidV4();
const store = storeCreator({
level: 'renderer',
reducer: renderersReducer,
sagas: mainAppWindowSagas,
senderId: GLOBAL_SENDER_ID,
});
const listenerRemover = listenToFromMainDispatchedActions(store, GLOBAL_SENDER_ID);
...
listenerRemover()我的问题是,为了删除 IPC 侦听器,如何以及何时调用是最好的方法?
我试图捕捉不同的文档/窗口事件beforeunload,但无济于事。为了保持一切“顺利”,我实际上在应用程序启动时打开所需的窗口并隐藏它们,关闭窗口隐藏它们而不是杀死它们,我意识到这是明智的问题事件,但我需要一种方法来优雅地删除这些听众,我没有在文档中找到任何有用的信息
提前致谢