Javascript 在处理相关实体时防止无效状态
考虑一个(ReactJS)应用程序,其中Javascript 在处理相关实体时防止无效状态,javascript,reactjs,relationship,application-state,Javascript,Reactjs,Relationship,Application State,考虑一个(ReactJS)应用程序,其中组和用户实体通过多对多关系相互关联 状态树如下所示: { groups: { "1": {id: "1", name: "..."}, ... }, users: { "42": {id: "42", name: "..."}, ... }, memberships: [ {groupId: "1", userId: "42"}, ... ] } { selectedGroup
组
和用户
实体通过多对多关系相互关联
状态树如下所示:
{
groups: {
"1": {id: "1", name: "..."},
...
},
users: {
"42": {id: "42", name: "..."},
...
},
memberships: [
{groupId: "1", userId: "42"},
...
]
}
{
selectedGroupIds: {
"1": {selectedUserIds: ["42", ...]},
...
}
}
在UI中,用户可以“选择”零个或多个组,每个组具有零个或多个关联用户。这在当前的状态中表示为:
{
groups: {
"1": {id: "1", name: "..."},
...
},
users: {
"42": {id: "42", name: "..."},
...
},
memberships: [
{groupId: "1", userId: "42"},
...
]
}
{
selectedGroupIds: {
"1": {selectedUserIds: ["42", ...]},
...
}
}
(顺便说一句,以下设计可能比上述设计更为可取,因为它更为明确;请对此发表意见):
{
SelectedGroupId:[
{id:“1”,selectedUserId:[“42”,…]},
...
]
}
当成员身份结束时,用户将被删除,等等。
您必须以级联方式更新状态并删除断开的关系。这与基于关系的其他状态更新没有任何区别
如果不想更新数据中的关系,也可以使数组有条件:
memberships: [
groups["1"] && users["42"] && {groupId: "1", userId: "42"},
...
].filter(o => o); // the filter is to ensure to remove null values that could be generated by conditions
在不使用任何第三方助手(这是不可避免的)的情况下,您必须手动清理您的状态。。