进入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)
};
```
由于
答案 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"]
},