Redux规范化状态形状删除引用Ids多个位置

时间:2017-08-26 14:23:15

标签: redux

进入redux世界,只是想确保如果我正在做的事情是理智和正确的。示例我们的规范化状态如下所示:

```

posts: {
      "1": {
        "id": "1",
        "title": "My first post!",
        "author": "Jake",
      },
      "2": {
        "id": "2",
        "title": "This other other post",
        "author": "Paul",
      },
      "3": {
        "id": "3",
        "title": "This new post",
        "author": "Billy",
      },
      "4": {
        "id": "4",
        "title": "This other other other post",
        "author": "Arnold",
      },
    },
globalFeed: {
  postIds:["1","2","3","4"]
},
myFeed: {
  postIds:["1","2"]
},

```

我们有两个不同的Feed,并且引用了包含它们的帖子。我读过丹·阿布拉莫夫(Dan Abramov)关于删除处于规范化状态的项目的帖子,他提到删除对该项目的引用是一个很好的解决方案,如果它是一个列表。

但在我的应用中,我们可以看到帖子列表并查看一篇帖子,因此仅删除引用不是解决方案。所以我的问题,如果我只是从州删除特定的帖子(即Id 1的帖子)并保持参考完整。然后使用selector检索帖子并过滤未定义的值。这个解决方案是否合理?我会遇到一些问题吗?有没有更好的解决方案?我可以删除特定的帖子AND引用,但如果有多个引用该帖子的地方,那就是很多样板。

选择器示例

```

const globalFeedPosts = state => {
  return state.globalFeed.postIds
        .map(id => state.posts[id])
        .filter(value => value !== undefined)
};

```

由于

1 个答案:

答案 0 :(得分:0)

如果你从resux商店中删除帖子对象,你肯定会遇到问题。在我看来,更好的方法是在每个帖子对象中添加一个标志,以便根据需要过滤帖子数组如下所示,希望这会有所帮助。

posts: {
      "1": {
        "id": "1",
        "title": "My first post!",
        "author": "Jake",
        "isShown":true
      },
      "2": {
        "id": "2",
        "title": "This other other post",
        "author": "Paul",
        "isShown":false
      },
      "3": {
        "id": "3",
        "title": "This new post",
        "author": "Billy",
        "isShown":false
      },
      "4": {
        "id": "4",
        "title": "This other other other post",
        "author": "Arnold",
        "isShown":false
      },
    },
globalFeed: {
  postIds:["1","2","3","4"]
},
myFeed: {
  postIds:["1","2"]
},