按域构建 Redux 状态?
Structuring Redux state by domain?
在检索具有不同搜索参数的领域对象时,Redux 应该如何构建状态。
在我的应用程序中,我在 table 中显示用户过滤的 organisations
列表。在同一页面上,我还将显示一个用户所属组织的较小列表,将来可能会在同一页面上显示另一个小列表,仅显示另一个用户的组织。
我会这样做吗:
{
list_organisations: [
{ id: 1, name: 'foo1' //... },
{ id: 2, name: 'foo2' //... },
{ id: 3, name: 'foo3' //... },
{ id: 4, name: 'foo4' //... },
{ id: 5, name: 'foo5' //... },
],
user_one_organisations: [
{ id: 6, name: 'foo' //... },
{ id: 2, name: 'foo' //... },
],
user_two_organisations: [
{ id: 4, name: 'foo' //... },
{ id: 6, name: 'foo' //... },
],
}
或者这个:
{
users: [
{ id: 1, organisations: [7,3,8], name: 'billy' },
{ id: 2, organisations: [3,6,1], name: 'sam' },
]
organisations: [
{ id: 1, name: 'foo', //... },
{ id: 2, name: 'foo1', //... },
{ id: 3, name: 'foo2', //... },
{ id: 4, name: 'foo3', //... },
{ id: 5, name: 'foo4', //... },
{ id: 6, name: 'foo5', //... },
{ id: 7, name: 'foo6', //... },
{ id: 8, name: 'foo7', //... },
{ id: 9, name: 'foo8', //... },
],
}
如果我们选择选项二,那么在我们出于某种目的需要查找单个组织的情况下我们会怎么做,例如"check if a users email exists within an organisation" -- 一切看起来都那么复杂……尤其是在执行一次性请求时?那甚至应该处于 redux 状态吗?
这样就可以了:
{
users: [
{ id: 1, organisations: [7,3,8], name: 'billy' },
{ id: 2, organisations: [3,6,1], name: 'sam' },
]
organisation_signup_form: {
doesUsersEmailExist: true / false / null,
}
organisations: [
{ id: 1, name: 'foo', //... },
{ id: 2, name: 'foo1', //... },
{ id: 3, name: 'foo2', //... },
{ id: 4, name: 'foo3', //... },
// ...
],
}
我实际上建议以完全不同的方式构建数据。您希望确保所有模型都易于获取,因此将它们保存在一个数组中可能会很棘手。
我建议使用这样的状态结构:
users: {
1: { id: 1, organisations: [7,3,8], name: 'billy' },
2: { id: 2, organisations: [3,6,1], name: 'sam' },
},
userList: [1,2],
organisation_signup_form: {
doesUsersEmailExist: true / false / null,
},
organisations: {
1: { id: 1, name: 'foo', //... },
2: { id: 2, name: 'foo1', //... },
3: { id: 3, name: 'foo2', //... }
}
我从 Dan 那里得到了这个建议
check if a users email exists within an organisation
您没有关于用户模型的电子邮件并且不清楚,因此很难回答这个具体问题。
我要给的一点建议是,您需要以数据库的方式构建您的状态,但它不必与您的实际数据库或 api 端点的结构相同。
在检索具有不同搜索参数的领域对象时,Redux 应该如何构建状态。
在我的应用程序中,我在 table 中显示用户过滤的 organisations
列表。在同一页面上,我还将显示一个用户所属组织的较小列表,将来可能会在同一页面上显示另一个小列表,仅显示另一个用户的组织。
我会这样做吗:
{
list_organisations: [
{ id: 1, name: 'foo1' //... },
{ id: 2, name: 'foo2' //... },
{ id: 3, name: 'foo3' //... },
{ id: 4, name: 'foo4' //... },
{ id: 5, name: 'foo5' //... },
],
user_one_organisations: [
{ id: 6, name: 'foo' //... },
{ id: 2, name: 'foo' //... },
],
user_two_organisations: [
{ id: 4, name: 'foo' //... },
{ id: 6, name: 'foo' //... },
],
}
或者这个:
{
users: [
{ id: 1, organisations: [7,3,8], name: 'billy' },
{ id: 2, organisations: [3,6,1], name: 'sam' },
]
organisations: [
{ id: 1, name: 'foo', //... },
{ id: 2, name: 'foo1', //... },
{ id: 3, name: 'foo2', //... },
{ id: 4, name: 'foo3', //... },
{ id: 5, name: 'foo4', //... },
{ id: 6, name: 'foo5', //... },
{ id: 7, name: 'foo6', //... },
{ id: 8, name: 'foo7', //... },
{ id: 9, name: 'foo8', //... },
],
}
如果我们选择选项二,那么在我们出于某种目的需要查找单个组织的情况下我们会怎么做,例如"check if a users email exists within an organisation" -- 一切看起来都那么复杂……尤其是在执行一次性请求时?那甚至应该处于 redux 状态吗?
这样就可以了:
{
users: [
{ id: 1, organisations: [7,3,8], name: 'billy' },
{ id: 2, organisations: [3,6,1], name: 'sam' },
]
organisation_signup_form: {
doesUsersEmailExist: true / false / null,
}
organisations: [
{ id: 1, name: 'foo', //... },
{ id: 2, name: 'foo1', //... },
{ id: 3, name: 'foo2', //... },
{ id: 4, name: 'foo3', //... },
// ...
],
}
我实际上建议以完全不同的方式构建数据。您希望确保所有模型都易于获取,因此将它们保存在一个数组中可能会很棘手。
我建议使用这样的状态结构:
users: {
1: { id: 1, organisations: [7,3,8], name: 'billy' },
2: { id: 2, organisations: [3,6,1], name: 'sam' },
},
userList: [1,2],
organisation_signup_form: {
doesUsersEmailExist: true / false / null,
},
organisations: {
1: { id: 1, name: 'foo', //... },
2: { id: 2, name: 'foo1', //... },
3: { id: 3, name: 'foo2', //... }
}
我从 Dan 那里得到了这个建议
check if a users email exists within an organisation
您没有关于用户模型的电子邮件并且不清楚,因此很难回答这个具体问题。
我要给的一点建议是,您需要以数据库的方式构建您的状态,但它不必与您的实际数据库或 api 端点的结构相同。