0

考虑一个(ReactJS)应用程序,其中 aGroupUser实体通过多对多关系相互关联。

状态树如下所示:

{
  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删除组或用户的情况。

有什么方法可以设计状态树以防止上述情况发生?或者在关系发生变化的情况下,人工管家是不可避免的吗?

4

1 回答 1

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
于 2019-01-07T16:21:08.050 回答