所以,这就是事情。 我们有主进程和渲染器,它们彼此隔离,只有桥接是IPC消息(到主进程)或BrowserWindow webcontents发送(到主进程)。
我在componentDidMount
处理我的活动,如此:
ipcRenderer.on('deviceWasPlugged', this.deviceWasPluggedListener);
并且我将使用componentWillUnount
删除此侦听器,以防止在组件被销毁时内存泄漏:
ipcRenderer.removeListener('deviceWasPlugged', this.deviceWasPluggedListener);
显然我的Class / Component
中有这样的方法deviceWasPluggedListener = (e, somedata) => {
// boring stuff goes there...
}
除了一个事实外,一切都很好看 - 对我来说似乎并不合适。 我仍然认为,应该有一个更好的地方来保持我的事件听众。
我认为,我不能将它保存在redux中间件中,基于coz事件的模型不允许我在redux中间件中取消订阅此事件,并且当我尝试发送smth时将创建多个事件,即使我通过action.type:
切换它const someMiddleware = store => next => action => {
if (action.type === 'SOME_TYPE') {
// ...
}
next(action);
};
export default someMiddleware;
所以,伙计们,请告诉我有没有更好的地方来保留我的后端事件?它应该在我每次需要时触发,它不应该导致maxEventListeners
内存泄漏问题。