考虑一个(ReactJS)应用程序,其中Group
和User
实体通过多对多关系相互关联。
状态树如下:
{
groups: {
"1": {id: "1", name: "..."},
...
},
users: {
"42": {id: "42", name: "..."},
...
},
memberships: [
{groupId: "1", userId: "42"},
...
]
}
在UI中,用户可以“选择”零个或多个组,每个组零个或多个关联用户。当前以这种状态表示:
{
selectedGroupIds: {
"1": {selectedUserIds: ["42", ...]},
...
}
}
(顺便说一句,下面的设计可能比上面的设计更可取,因为它更明确;希望对此发表评论):
{
selectedGroupIds: [
{id: "1", selectedUserIds: ["42", ...]},
...
]
}
无论如何,回到主要问题:
当前,当在一个组的上下文中选择一个用户,并且在某个时刻该组和用户断开连接(成员身份终止,用户被删除等)时,selectedGroupIds
将处于无效状态州。在编写此代码时,我现在意识到,当删除组或用户时,这也适用于memberships
。
有什么方法可以设计状态树,从而防止上述情况的发生?还是在改变关系的情况下不可避免地要进行人工整理?
答案 0 :(得分:1)
在membership ends, user gets deleted, etc.
时,您必须以层叠方式更新状态并删除断开的关系。这与其他基于关系的状态更新没有什么不同。
如果您不想更新数据中的关系,还可以使数组成为条件数组:
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