我正在用React/Redux構建一個應用程序,它在某些方面類似於文本編輯器。這完全不是一個文本編輯器,但它是一個一般的範例。有一個光標放置新物品。項目可以添加,選擇,刪除等。用於文本編輯器的Redux體系結構:處理耦合狀態
我正在努力以最好的方式來構建我的減速器,以符合redux的精神。我有單獨的狀態切片代表選擇狀態,文本本身,光標狀態和其他設置。我認爲「redux」方法應該是對這些狀態切片中的每一個進行縮減,並根據某個操作獨立地變換狀態。
但是,在文本編輯器中,這些狀態切片比第一眼更加耦合得多。當您按下某個鍵時,有時會在光標位置添加一個字母,光標會向前移動。但是,如果選擇了文字,所選文字將首先被刪除。如果您處於「插入」模式,則右側的文本將被「消耗」。或者可能是一個修飾鍵關閉,並且根本不添加文本。
換句話說,不同的狀態切片是非常耦合的,其中發生的事情取決於其他狀態的當前狀態。
我讀過"Beyond Combine Reducers" section in the Redux manual,並知道如何切片減速器之間共享狀態,但如果最終結果是通過對整個國家的每一個切片減速看起來不太優雅。我不喜歡他的方法的另一件事是,每個減速器必須查看整體狀態並獨立地得出關於它對特定動作的正確響應應該是什麼的相同結論。那是我應該做的還是我應該以某種方式對我的狀態進行不同的構造?
一個集中還原劑告訴光標,選擇狀態,內容等的替代方法在概念上更容易,但似乎不能很好地擴展。
I've also read that many times coupled state is a sign that your state isn't minimal並且您應該重構並使用memoized選擇器。但是,這似乎並不是這種情況。遊標的位置不是從文本中導出的,也不是選擇狀態。
最後,我還考慮過Thunk中間件,因爲這是我見過的處理多個/更復雜操作的建議。我很猶豫,因爲它似乎更像是用於異步調度,這不是。
我想了解正確的方法來設計這種類型的應用程序,最符合「減少」設計模式,並瞭解如果有多種方式前進可能會有任何折衷。
我知道這不是一個小項目:-)我不能使用現有的軟件,因爲雖然這是一個編輯器,它使用許多與文本編輯器相同的動作,但它根本不用於編輯文本。我一直在仔細研究的一個代碼庫是Draft.js,它與codemirror類似,但它更接近於使用不變性。 – Dave