问题:
我使用redux-thunk,希望收到帖子。要接收帖子,我需要吸引用户。因此,我对自己的重装版本感到怀疑,如果不是将所有数据拆分为两个重装版本,是否将所有数据合并到一个重装版本中是正确的?
Thunk示例:
export default group_id => {
return async dispatch => {
const users = await API.get(`/users?group_id=${group_id}`) // get users
const posts = await axios.all([...getPosts(users)]) // get all posts by user ids
dispatch(loadUsersAction(users))
dispatch(loadPostsAction(posts))
}
}
最佳答案
根据您的要求,可能有几种方法。
如果目的是首先加载用户,然后加载他们的帖子,那么我将首先调用/users
,然后调度另一个 Action 创建者来获取其/posts
。
因为将所有内容组合在一起将使您的用户等待更长的时间来更改UI中的某些内容(例如:加载微调器),因此我将这些拆分为两个单独的操作。
export function getUsers(group_id) => {
return async dispatch => {
const users = await API.get(`/users?group_id=${group_id}`);
dispatch(loadUsersAction(users));
return users;
};
};
export function getPostForGroupUsers (group_id) => {
return async dispatch => {
const users = await dispatch(getUsers(group_id));
const posts = await axios.all([...getPosts(users)]);
dispatch(loadPostsAction(posts));
return posts;
}
}
// or just call users, dispatch and get them from store
export function getPostForAllUsers () => {
return async dispatch => {
// this depends on your implementation
const users = getFromReduxStore('users');
const posts = await axios.all([...getPosts(users)]);
dispatch(loadPostsAction(posts));
return posts;
}
}
也许您可以提供有关您案件的更多详细信息,然后我可以给出更准确的答复。