目前,我在Electron應用程序中使用了Vue。在Vue的主組件中,可能有多個子組件。每個孩子聽可能由電子的主要過程中播放,像這樣一個信號:在Vue組件中偵聽Electron的ipcRenderer消息
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的事件系統將消息進一步廣播給孩子們?還是有更好的方法來處理這個問題?
你假定我使用vuex作爲國家管理者點擊這裏。事實並非如此。一旦收到信號,我只想執行可視化更新(顯示加載程序)。如果這涉及到引入vuex這很好,但也會造成更多的複雜性。應該有一個簡單的方法來做到這一點,而不必明確依賴國家經理否? – Maarten
我剛剛更新了另一種方式,但這是一種很冒險的方式,因爲在某種情況下,如果您強制更新根組件,您將再次啓動多個「ipcRenderer」消息。你可以通過'Devtron'工具來檢查這個工具 - IPC channel – Necmttn
我實際上一直在想自己在主組件中有一個監聽器,並且讓這個監聽器在孩子的後面播放vue事件:'Vue。$ root。$ emit(' set-service-status',componentId)'。 ('set-service-status',(id)=> {//檢查組件id是否與廣播的id相匹配,然後執行一些操作}) – Maarten