javascript - 使用多个 axios 请求分派(dispatch)不同的操作

标签 javascript reactjs redux react-hooks

我有一个发送不同请求的 get 方法,并且我想为我发送的任何请求分派(dispatch)一个操作。

查看相关代码

export function getTeamsStats(league, team, type) {
  return function(dispatch) {

    let url1 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-01-09"
    let url2 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-02-09"
    let url3 = "https://www.api-football.com/demo/api/v2/statistics/891/490/2020-03-09"

    let urlArray = [url1,url2,url3]

    let promiseArray = urlArray.map(url => axios.get(url));

    const api = true;

    if (api) {
      return axios({
        method: "get",
        headers: {
          "x-rapidapi-host": "api-football-v1.p.rapidapi.com",
          "x-rapidapi-key": ""
        }
      })
      .all(promiseArray)
      .then(res => {
        const {
          matchsPlayed: { home: teamsMatchsPlayedHome, away: teamsMatchsPlayedAway},
          wins: { home: teamsStatsWinHome, away: teamsStatsWinAway },
          draws: { home: teamsStatsDrawHome, away: teamsStatsDrawAway },
          loses: { home: teamsStatsLoseHome, away: teamsStatsLoseAway }
        } = res.data.api.statistics.matchs;
        const teamStats = {
          teamsMatchsPlayedHome,
          teamsMatchsPlayedAway,
          teamsStatsWinHome,
          teamsStatsWinAway,
          teamsStatsDrawHome,
          teamsStatsDrawAway,
          teamsStatsLoseHome,
          teamsStatsLoseAway
         }
        dispatch(receivedTeamsStat(teamStats, type));

对于这 3 个网址中的任何一个,我想执行此调度 dispatch(receivedTeamsStat(teamStats, type));

我只需一个 url 请求即可完成相同的 dispatch 操作并获取状态,但现在我不知道如何在 dispatch 中实现相同的效果对于每个网址。

最佳答案

这个逻辑可能对你有帮助。您可以在 .then()

中使用 forEach
.then( res => res.forEach( result => dispatch({type: FETCH_DATA_SUCESS, payload:  result.data}))

内部:

...

if (api) {
  return axios({
    method: "get",
    headers: {
      "x-rapidapi-host": "api-football-v1.p.rapidapi.com",
      "x-rapidapi-key": ""
    }
  })
  .all(promiseArray)
  .then( res => {
        ...

        res.forEach( result => dispatch({type: FETCH_DATA_SUCESS, payload:  result.data}))

        ...
  })

  ...

关于javascript - 使用多个 axios 请求分派(dispatch)不同的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61154849/

相关文章:

javascript - 如何声明数组中的键值对并为其赋值

javascript - <i class ="fa fa-trash"> 在 <span></span> 中不工作

javascript - 如何使用 Webpack 将 jQuery UI 包含到我的项目中?

javascript - 如何根据鼠标点击裁剪选定的矩形

java - request.getSession().getId() 和 request.getSession(false) 的区别?

reactjs - 使用 ES6 类对静态进行 react

javascript - ReactJS:基于 AJAX 时如何处理组件状态?

reactjs - 如何在 typescript 中编写匿名函数的函数类型定义?

javascript - Redux 状态下的复杂对象

reactjs - 获取 Jest 和 Enzyme 中连接组件的状态