我推薦的一種模式是使用選擇器來儘可能隱藏商店的形狀。這樣,如果您需要更新商店的形狀,您應該只能更新選擇器,而不能更新應用程序的其他部分。React Redux - 存儲對象的方法
然而,同樣的問題出現在州內使用模型。
作爲衆多例子之一,我們假設我在Redux中構建了一個文件系統。我有一個可以是目錄或文件的文件列表。
我的商店可能有一個fileList
屬性,它包含一個文件ID數組以及一個files
對象,該對象將fileId
映射到文件對象。
比方說,我有一個文件列表,我想根據文件或目錄是否有不同的Item
組件(即DirectoryItem
和FileItem
)。實現這一
一種方式是做這樣的事情:
{
files.map(file => {
file.type = 'directory' ?
<DirectoryItem key={file.id} ...file /> :
<FileItem key={file.id} ...file />
)}
}
(或者我可以創造一個更高階FileListItem
成分,例如,做了檢查,並使得無論是DirectoryItem
或FileItem
)
但是這可能並不理想,因爲現在我的組件需要知道文件對象的結構。我可能想要添加不同類型的對象(即快捷方式文件或共享文件),並可能決定不再想要表示我的數據。因此,我需要去更新我所有的組件等。
例如,如果我在Backbone中這樣做,我可能會選擇在我的模型上定義一個isDirectory()
函數,但是這樣做不會這似乎是Redux做事的方式。
我能想到的一個可能的解決方案是創建一個FileUtils
輔助類,它導出isDirectory
方法並將文件對象作爲參數。
另一種選擇將創建一個isDirectory
選擇這需要一個文件編號爲道具,做這樣的事情:
(files, props) => state.files[props.fileId].type == 'directory'
如果我要創建選擇,我想我需要創建一個高階組件從中調用選擇器。
想知道在Redux中推薦哪種方法嗎?我錯過了另一種可以幫助解決這個問題的方法嗎?