Json 规范化RESTAPI的redux状态
考虑以下Reddit启发的模式 我正在开发用于管理用户、帖子和评论的管理GUI(在这里伪造实际域)。React应用程序具有不同的路由(导航选项卡):Json 规范化RESTAPI的redux状态,json,reactjs,rest,web-services,redux,Json,Reactjs,Rest,Web Services,Redux,考虑以下Reddit启发的模式 我正在开发用于管理用户、帖子和评论的管理GUI(在这里伪造实际域)。React应用程序具有不同的路由(导航选项卡): 用户列出用户及其帖子和评论 帖子列出帖子及其评论(包括原始用户) 这两条路线还允许编辑列出的实体 我定义了以下REST端点 /users /users/{id}/posts /users/{id}/ /posts /posts/{id}/comments 在这种情况下,我应该如何塑造Redux状态?我应该吗 A) 只需在自己的子树中按id分
- 用户列出用户及其帖子和评论
- 帖子列出帖子及其评论(包括原始用户)
/users
/users/{id}/posts
/users/{id}/
/posts
/posts/{id}/comments
在这种情况下,我应该如何塑造Redux状态?我应该吗
A) 只需在自己的子树中按id分组不同的实体类型?在这种情况下,检索所有帖子或为用户检索帖子实际上是在同一子树上操作的。React组件将过滤此子树,以根据需要检索其道具
B) 使树的形状更细粒度,以便与路由一起使用?例如,按id分组帖子路由帖子,按用户id分组用户路由帖子?此解决方案将导致一些冗余的重复,直到使用额外的工作使事情正常化。这取决于您正在构建的应用程序的复杂性。你看过那本书了吗 从API端点看,post和用户看起来是非常分离的,而评论是在post上下文中活动的。如果这是真的,则此redux状态可能是一个良好的开端:
{
entities: {
posts: {
[postId1]: [
// comments
],
...
},
users: {
[userId]: {
posts: [postId1, postId2, ...]
},
...
}
},
ui: {
screen1: {
fetchedPosts: [postId1, postId2],
fetchedUsers: [userId10, userId11]
}
}
}
实体
用作获取数据的本地数据库,而ui
保存实体的ID,以呈现特定组件。当组件执行提取时,响应数据存储在相关实体中,而ID也存储在组件的redux状态中。然后,在组件的渲染方法中,在两者之间进行匹配
使用此模式,您可以获得单一的真实性来源,可以在组件之间共享实体,进行分页,持久化数据。这是一个很好的实现细节