问题:

我使用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;
  }
}


也许您可以提供有关您案件的更多详细信息,然后我可以给出更准确的答复。

10-07 21:35