目前,我在Electron应用程序中使用了Vue。在Vue的主要组件内部,可能有多个孩子。每个孩子都会听到可能由Electron的主要流程广播的信号,如下所示:
export default {
...
created() {
ipcRenderer.on('set-service-status', (e, data) => {
// something with the data
})
}
...
}
但是,当有超过11个子组件时,节点会抛出错误MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 set-service-status listeners added. Use emitter.setMaxListeners() to increase limit
。这是有道理的,因为正在设置多个事件侦听器,每个组件都有一个。
怎么能解决这个问题?我应该只监听主组件内的set-service-status
信号,然后使用Vue的事件系统将信息进一步广播给孩子吗?或者有更好的方法来解决这个问题吗?
答案 0 :(得分:0)
据我了解您当前设置的问题是,您每次创建组件时都会开始侦听,这会导致一个created()
调用有很多侦听器的问题。
而非通过vuex
收听,将此逻辑放在created()
内
并且只打电话一次。或者您仍然可以在您的输入文件中使用function setupIpc(dispatch) {
ipcRenderer.on('set-service-status', (e, data) => {
// something with the data
})
ipcRenderer.on('fullscreenChanged', (e, args) => {
dispatch('fullscreenHandler', args)
})
ipcRenderer.send('ipcReady')
}
,即主根组件。并将数据作为道具提供给您的子组件。这也有效。
;
updateState({ commit, dispatch }) {
setupIpc(dispatch)
setInterval(() => { dispatch('stateSaveImmediate') }, 5000)
dispatch('init')
ipcRenderer.once('configGet', (e, data) => {
if (data === !null || !undefined) {
commit(ActionTypes.UPDATE_STATE, data)
} else {
commit(ActionTypes.UPDATE_STATE_ERROR_NO_CONFIG_FILE)
}
dispatch('doSomething')
})
ipcRenderer.send('configGet')
},
并且只在您启动应用程序时调用一次,
E.g:
In your code
X axis: 1
Y axis: "s1"
will have the Z values as [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10].