使用Immutable.js记录的树模型结构& Redux&打字稿

时间:2015-12-30 09:05:02

标签: typescript redux immutable.js

我从API获得了一个扁平结构:

{
    "users": [
         {"id": 123, "name": "Peter"},
         {"id": 124, "name": "John"}
    ],
    "threads": [
         {"id": 1, "participantIds": [123, 124, 125]},
         {"id": 2, "participantIds": [879, 888]}
    ]
}

其中participantIds指用户"实体"。

我想将数据存储在Redux中,即一个不可变的平面结构。为了方便起见,我创建了Record实体,我希望在我的React组件中将其作为输入(props)接收:

export class User extends Immutable.Record({})
{
    id: string;
    name: string;
}

export class Thread extends Immutable.Record({})
{
    id: string;
    paticipants: Immutable.Map<string, User>;
}

由于Redux的扁平结构不同,我不确定,如何正确构建这种架构。以下是我可能做过的一些总结:

  1. 使用重新选择库并将平坦状态转换为树状态。
    1. 将数据存储为原始Immutable.js Map&amp;列表然后在选择器中将它们转换为实体。
    2. 介绍属性Thread-&gt; participantIds并在reselect中填充Thread-&gt;参与者,因此运行选择器之前的属性为空。
    3. 在两者之间创建一个层,比如MVVM,所以我会有两种类型的实体,一种用于存储数据,另一种用于传递给React组件。
  2. 存储树状态并对特定(用户)实体的所有可能发生情况进行更新。
  3. 我不喜欢这两种可能的解决方案。对于这种通常和简单的用例,所有这些似乎都非常冗长。

    我在这里找到了一些讨论:https://github.com/rackt/redux/issues/815但我没有得到我需要的回答。

0 个答案:

没有答案