javascript - 如何为有评论的帖子构建 React 上下文
问题描述
介绍
在实施 Instagram 克隆时:
- 用户有帖子。
- 帖子可以被点赞。
- 用户可以在帖子中发表评论。
- 帖子有一个 totalLikes 和 totalComments 字段。
- 评论可以点赞。
- 用户可以回复评论。
- 评论有一个totalLikes 和totalComments(回复)字段。
到目前为止,我一直在使用当前的 PostsContext:
const initialState = {};
export function PostsProvider({ children }) {
const [contents, dispatch] = useReducer(contentsReducer, initialState);
const addUserPosts = (userId, posts, unshift = false, cached = true) => { ... }
const likePost = (postOwnerId, postId) => { ... }
const commentPost = (postOwnerId, postId, comment) => { ... }
const getUserPosts = (userId) => { ... }
const getUserPost = (userId, postId) => { ... }
}
在哪里,我的状态数据如下所示:
{
userId1: {
posts: [
{
id,
uri,
totalLikes,
totalComments,
isLiked,
date
},
...
]
},
userId2: { posts: [...] }
}
问题
我的问题是,我应该使用其他上下文来发表评论吗?我的意思是,评论的工作方式与帖子相同,它们可以被点赞和回复……所以也许,这是不必要的。
当用户在帖子中评论时:
1. The post totalComments is increased.
2. If the user is replying to a comment in the post, the replied comment's totalComments is increased too.
当用户点赞评论时,它不会影响帖子“数据”本身,只会影响点赞的评论 totalLikes 字段。
所以......如果我为评论创建一个新的上下文,我似乎需要在其中使用 PostsContext ,以增加 post totalComments 字段。
关于如何构建我的帖子上下文的任何想法?
注意:我的问题更多是关于上下文组织的(不要看实现,只看我的有状态数据的结构和拆分上下文的想法)。
解决方案
有取舍。对于多个上下文,您可以选择在单个上下文中呈现组件,从而在另一个上下文更改时减少刷新(提高性能)。
但是,如果您的大多数组件都需要访问多个上下文,那么拥有一个“存储”(单个应用程序级上下文)可能会更好。如果您正在使用选择器模式(不仅适用于 Redux),那么选择器可以计算否则会在多个上下文中的数据。
我正在从事一个具有多种背景的项目,并经常考虑将它们结合起来。
如果您的项目很复杂,您可能需要考虑Redux而不是上下文。它增加了复杂性,但解决了一些围绕组织和结合国家不同领域的问题。如果你这样做,我强烈建议从Redux Toolkit开始以减少样板。
推荐阅读
- java - 在 Spring Boot 中扩展 Mongo 默认配置
- sql - 将数字转换为 HH24:Mi:SS 其中 Mi:SS 是连接字符串
- javascript - 调整大小后如何保持 Konvas 图层居中?
- c# - 处理 .NET 中的 API 数据
- python - 在 Python 中一起使用 pandas groupby 和 numpy where
- reactjs - 在 reactjs 应用程序中显示来自私有 S3 存储桶的图像
- php - 如何在定义关键字后获取关键字内容
- git - 在git中合并拆分历史
- c# - 强制 NReco.ImageGenerator 下载特定版本的 wkhtmltoimage.exe
- sql - 根据列值在 SAS 中添加条目