在Redux中发现了很多关于规范化状态的信息,但在连接到后端端点时仍然不清楚流。
如果有人愿意回复这篇很长的帖子,我真的很感激。请分享你关于如何处理规范化状态的异步逻辑的知识或参考资料。
让我们以官方文档中的Normalized state为例:(为便于阅读而缩短的版本(
{
posts : {
byId : {
"post1" : {
id : "post1",
author : "user1",
body : "......",
comments : ["comment1", "comment2"]
}
},
allIds : ["post1"]
},
comments : {
byId : {
"comment1" : {
id : "comment1",
author : "user2",
comment : ".....",
},
"comment2" : {
id : "comment2",
author : "user3",
comment : ".....",
}
},
allIds : ["comment1", "comment2", "comment3", "comment4", "comment5"]
},
users : {
byId : {
"user1" : {
username : "user1",
name : "User 1",
}
},
allIds : ["user1"]
}
}
问题:
- 这是否意味着我必须从服务器获取ALL现有评论,然后才能从redux状态查询所需的评论
或
在显示特定帖子时,我是否应该只使用ID数组(post.ecomments(从服务器获取所需的评论?在这种情况下,我会用从服务器获得的评论实体替换所有评论实体吗?
此示例结构何时适用?它仍然被认为是标准化的吗?在这里我将如何处理异步逻辑?
entities: { authors : { byId : {}, allIds : [] }, books : { byId : {}, allIds : [] }, authorBook : { byId : { 1 : { id : 1, authorId : 5, bookId : 22 }, 2 : { id : 2, authorId : 5, bookId : 15, }, 3 : { id : 3, authorId : 42, bookId : 12 } }, allIds : [1, 2, 3] }
关于该主题的有用答案:
有关主题的有用文档:异步逻辑,规范化状态,更新规范化状态
Hiya:("归一化的";不是的意思吗;我首先从服务器获取了每一个可能的值";。这只是意味着提取的条目存储在由项ID键控的查找表中。你可以获取一些帖子和他们的评论,将它们加载到那些标准化的查找表中,获取更多并添加它们,等等。(事实上,这就是为什么Redux Toolkit的createEntityAdapter
API提供了更新功能,可以将更多项添加/插入/更新到现有的标准化查找表中。(
因此,一种可能的使用场景可能是:
- 获取一页的帖子,插入到规范化的帖子状态
- 用户打开一篇帖子,获取该帖子的评论并插入到规范化的评论状态
- 根据需要重复这些步骤