Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在处理相关实体时防止无效状态_Javascript_Reactjs_Relationship_Application State - Fatal编程技术网

Javascript 在处理相关实体时防止无效状态

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

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

状态树如下所示:

{
  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

在不使用任何第三方助手(这是不可避免的)的情况下,您必须手动清理您的状态。。