Redux -标准化状态下的异步逻辑

nbysray5  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(114)

在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 logicNormalizing stateUpdating Normalized state

ijnw1ujt

ijnw1ujt1#

你好:)“规范化”并不意味着“我已经从服务器上获取了所有可能的值”。它只是意味着你获取的条目被存储在以条目ID为键的查找表中。你可以获取一些帖子和它们的评论,将它们加载到这些规范化的查找表中,获取更多的帖子并添加它们,等等。(事实上,这就是为什么Redux Toolkit's createEntityAdapter API提供了更新函数来添加/插入/更新更多的条目到一个现有的规范化查找表中。)
因此,一个可能的使用场景可能是:

  • 获取一个页面的帖子,插入到规范化的帖子状态中
  • 用户打开帖子,获取帖子的评论并插入到规范化的评论状态中
  • 必要时重复这些步骤

相关问题