我正在使用Redux构建电子邮件收件箱。屏幕的一半有一个电子邮件主题列表,您可以单击一个以查看屏幕另一半的完整电子邮件内容。大多数开发人员都称之为" master-detail"类型申请。
" master"中显示的电子邮件列表(它是我的应用程序中名为SimpleEmail
的类)看起来像这样。在获取可能超过100封电子邮件的列表时,该模型已缩小以减少传输的数据量。
{
from: "hello@site.com",
subject: "Hello, Jon",
id: "abc123"
}
"详细信息中的电子邮件" list(一个名为EmailDetails
的类)的模型更复杂,形状也不同。
{
id: "abc123"
headers: {
from: "hello@site.com",
subject: "Hello, Jon",
to: [],
bcc: null,
cc: null,
replyTo: // and about 10 more fields
},
bodyHtml: "This is some text",
attachments: [],
receivedAt: null,
// and about 10 other fields
}
我应该如何在redux中设计我的应用程序状态来处理这两种不同的模型?我最初的想法是做以下事情:
{
emailMaster: {
entitiesById: {}, // a Map of emails keyed by ID
ids: [],
selectedId: null
isFetching: false,
isError: false
},
emailDetails: {
selectedEntity: {}, // A single email object
isFetching: false,
isError: false
}
}
我已经看到了一些与我的设计有关的问题:
emailMaster.selectedId
与emailDetails.selectedEntity.id
的值不同,该怎么办?再次,这似乎是一种代码味道。显然没有什么感觉是对的。有没有更好的方法来设计应用程序状态的形状?