处理以下情况的最佳效果是什么?有没有一种不同的方法来处理这个(我描述的选项除外)效率更高?是否有标准'管理它的方式?
说我有以下端点:
/posts
/users
获取/发布:
[{
id: 1,
title: 'Some post',
userId: 1,
...other post data
},
...more posts
]
GET / users / 1:
[{
id: 1,
name: 'ExampleUser',
...other user data
},
...more users
]
我想返回一个帖子列表,其中显示了有关创建它们的用户的一些基本信息。为此。我需要获取帖子列表,然后为每个帖子获取用户。一个用户可能在多个帖子中被引用。
React组件被组织为(伪代码):
<PostsList posts={posts}>
<Post post={post}>
<UserInfo user={user} />
</Post
</PostsList>
选项A:在PostsList中调度(fetchPosts()),然后在每个帖子(或每个UserInfo)中调度(fetchUser(post.userId)
优点:非常容易实施;不需要专门的行动(即fetchPostsWithUserInfo())
缺点:必须将多个组件连接到商店;知道何时渲染组件或加载微调器可以进入复杂的逻辑;可以多次获取同一个用户(即使fetchUser(post.userId)调度在启动操作时正在获取用户的操作记录,这似乎并不能完全防止重复调用)。
选项B:处理操作
const fetchPostsWithUsers = () => dispatch => {
dispatch(fetchPostsWithUsersStart());
fetchPostsFromServer()
.then(res => {
dispatch(fetchPostsSuccess());
const users = getListOfUniqueUserIds(res.data);
users.forEach(userId => dispatch(fetchUser(userId)));
})
.catch(err => dispatch(fetchPostsError()));
}
优点:没有重复的电话,更少的连接组件
缺点:仍然存在大量加载检查的问题;如果某些呼叫失败可能会丢失信息;密切联系帖子调用用户数据获取
选项C:与选项B类似,但使用Promise.all获取用户数据,然后只有一次成功调用(dispatch(fetchPostsWithUserDataSuccess())
优点:更少的加载检查,全部或全部,因此没有部分丢失的数据
缺点:全有或全无,如果一旦获取失败,则必须重新获取所有数据;响应时间较慢,因为在任何数据可用之前需要等待所有单个呼叫完成
我已经尝试了很长时间才能找到关于这个主题的信息,但我找不到任何令我惊讶的信息,因为我认为这是一个常见的情况。可能我只是不知道描述问题的正确术语,在这种情况下,我非常希望知道正确的术语。
答案 0 :(得分:0)
选项A 是不错的选择,因为您可以单独重复使用每个容器组件。您只需要 去抖 获取提醒,这样相同的系统就不会同时运行多次。