我在找一些指導,關於在實時通訊管理狀態/聊天應用程序內置有VueJS 2.在實時通訊應用程序與國家打交道
該應用程序由幾個部分組成,其概述如下圖:
到目前爲止,我已經實現了顯示(假的)對話。 App組件包含一個包含對話對象的數組。對於每個子組件,使用道具傳遞相關數據。這很簡單,就像一個魅力。
現在,我必須處理深層嵌套在樹中的組件的動作/突變。例如,發送消息並將其附加到相應的消息陣列。
我認爲這與在AppConversationChatWindowInput組件中分派(全局)事件並在App組件中處理它一樣簡單。男孩是我錯了。顯然,this functionality was removed when Vue 2.0 was introduced贊成Vuex。我不確定它爲什麼被刪除,因爲在某些情況下,這可能是處理事件的完全合理的方式。
我想有幾個可能的解決方案:
薪火WebSocket連接到每個子組件。這在技術上可行。應用程序將連接到websocket服務器,並使用道具將此連接傳遞給其子組件。當用戶發送消息時,它會被websocket服務器迴應。 App組件可以偵聽消息並將其附加到消息數組中。
無論技術的可行性如何,這感覺就像一個蹩腳,難以維護的archicture對我來說。在我看來,應用程序以外的其他組件都不應該意識到websocket連接,更不用說其具體實現了。
在鏈中的每個組件中手動冒泡事件。 這似乎是一個完整的痛苦來維持。引入了很多不必要的複雜性和失敗點。
使用全局事件總線。 這是可能的,但爲什麼輸入字段應該依賴於全局事件總線?我不喜歡不必要的依賴和耦合。它增加了複雜性,使測試更加困難。
使用全局數據存儲(Vuex)。 請參閱#3。另一個依賴並增加了複雜性。另外,if我會解決Vuex,我將如何檢索我的組件中的數據?我是否使用組件(如我現在所做的)將它傳遞給它?或者,樹中的某個組件是否會直接從商店中抓取它?對我來說,感覺這個組件比它應該知道的要多得多。
有什麼想法?在我的情況下處理狀態的最佳方式是什麼?
我想加入veux複雜或終極版遠大於想擁有特別是當組件的狀態取決於其他組件(如打開一個菜單時暫停遊戲)的組件管理自己的狀態。由於規則是應用程序規則(組件不應該知道此規則),因此無法與菜單進行通信。事件存儲使您能夠在應用程序級別處理某些事件以實施此類規則。 – HMR
[本地事件氣泡](https://vuejs.org/v2/guide/components.html#Binding-Native-Events-to-Components)。 –
@RoyJ:我會如何決定Vue事件和本地事件? –