具有依赖关系的多个调用 redux-thunk

Posted

技术标签:

【中文标题】具有依赖关系的多个调用 redux-thunk【英文标题】:Multiple calls with dependencies redux-thunk 【发布时间】:2020-05-05 18:02:32 【问题描述】:

问题:

我使用redux-thunk,我想接收帖子。要接收帖子,我需要获取用户。所以我对我的 thunk 有疑问,在一个 thunk 中获取所有数据是否正确,如果不是如何将其拆分为两个 thunk?

Tunk 示例:

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))
  

【问题讨论】:

这不是一个中间件,而是一个 thunk。中间件是你传递给applyMiddleware的东西 【参考方案1】:

根据您的要求,可能有多种方法。

如果目的是加载,首先是用户,然后是他们的帖子,我会先调用/users,然后派另一个动作创建者来获取他们的/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;
  

也许你可以提供更多关于你的案例的细节,然后我可以给出更准确的答复。

【讨论】:

您正在等待 thunk getUsers 函数,而不是在 getPostForGroupUsers 中调度它 @HassanGilak 是正确的,应该是await dispatch(getUsers(group_id)) 要补充一点,我个人是 thunk 的粉丝,而你的交织并不复杂,但一旦你达到这种水平,我会更强烈地提倡侧库。

以上是关于具有依赖关系的多个调用 redux-thunk的主要内容,如果未能解决你的问题,请参考以下文章

一次开发多个 npm 模块的方法(具有交叉依赖关系)

具有“依赖关系”的 SVN 多个分支

在 Angular 中调用具有依赖关系的函数

具有依赖关系的 useCallback 与使用 ref 调用函数的最后一个版本

markdown 如何配置ssh配置以使多个私有github依赖关系具有多个部署密钥和自动部署。

具有依赖 AJAX 调用的嵌套 Select2