我推荐的一种模式是使用选择器来尽可能隐藏商店的形状。这样,如果您需要更新商店的形状,您应该只能更新选择器,而不能更新应用程序的其他部分。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中推荐哪种方法吗?我错过了另一种可以帮助解决这个问题的方法吗?