在Redux中找到了很多关于标准化状态的信息,但在连接到后端端点时仍然不清楚流程。
如果有人愿意回复这篇长长的文章,我会非常感激。请分享你的知识或参考资料,关于如何处理异步逻辑的规范化状态。
让我们以official documentation的标准化状态为例:(为便于阅读,缩短了版本)
{
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"]
}
}
问题:
1.这是否意味着我必须从服务器获取所有现有的注解,然后才能从redux状态查询所需的注解?
或
当显示特定的帖子时,我应该只使用ID数组(post.comments)从服务器获取所需的评论吗?在这种情况下,我应该用从服务器获取的评论实体替换所有评论实体吗?
1.这个例子结构什么时候适用?它仍然被认为是一个规范化的?我在这里如何处理异步逻辑?
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]
}
关于该主题的有用答案:markerikson
关于以下主题的有用文档:Async logic、Normalizing state、Updating Normalized state
1条答案
按热度按时间ijnw1ujt1#
你好:)“规范化”并不意味着“我已经从服务器上获取了所有可能的值”。它只是意味着你获取的条目被存储在以条目ID为键的查找表中。你可以获取一些帖子和它们的评论,将它们加载到这些规范化的查找表中,获取更多的帖子并添加它们,等等。(事实上,这就是为什么Redux Toolkit's
createEntityAdapter
API提供了更新函数来添加/插入/更新更多的条目到一个现有的规范化查找表中。)因此,一个可能的使用场景可能是: