反应图表的UseEffect数据数组

时间:2020-05-19 21:17:43

标签: javascript reactjs redux use-effect recharts

我想用我从下拉菜单中选择的团队wins的{​​{3}}构建图表。

我正在使用recharts从我要选择的日期获取winsmatchs的数字。

图表中使用的data数组必须具有以下格式以及这些对象。

day: matchs played
Team: number of victories

示例

  Data: [
    {day:16, Sao Paulo:4},
    {day:22, Sao Paulo:4},
    {day:27, Sao Paulo:7}
  ],

这里是相关代码。

这是我的getTeamStats通话,我做了Promise.all处理来自日期的请求。 这是一个示例,当我选择Sao Paulo主队时,我向这些端点发送了3个请求。

https://www.api-football.com/demo/v2/statistics/357/19/2019-08-30
https://www.api-football.com/demo/v2/statistics/357/19/2019-09-30
https://www.api-football.com/demo/v2/statistics/357/19/2019-10-30

export function getTeamsStats(league, team, type, name) {
  return function(dispatch) {
    const url = "https://www.api-football.com/demo/v2/statistics";
    let dates = ["2019-08-30", "2019-09-30", "2019-10-30"];
    const getAllData = (dates, i) => {
      return Promise.all(
        dates.map(x => url + "/" + league + "/" + team + "/" + x).map(fetchData)
      );
    };

    const fetchData = URL => {
      return axios
        .get(URL)
        .then(res => {
          const {
            matchsPlayed: { total: teamsTotalMatchsPlayed },
            wins: { home: teamsStatsWinHome }
          } = res.data.api.statistics.matchs;
          const matchsPlayed = teamsTotalMatchsPlayed;
          const winHome = teamsStatsWinHome;
          const teamStats = {
            matchsPlayed,
            winHome
          };
          dispatch(receivedTeamsStat(teamStats, type, name));
        })
        .catch(e => {
          console.log(e);
        });
    };

    getAllData(dates)
      .then(resp => {
        console.log(resp);
      })
      .catch(e => {
        console.log(e);
      });
  };
}

我调度包含teamStatsmatchs played的{​​{1}}对象。

wins

在组件中,这就是我尝试创建dispatch(receivedTeamsStat(teamStats, type, name)) 数组的方式

data

这是我选择圣保罗时数据的外观

https://www.api-football.com/

我的难题是如何将选择的 const [data, setData] = useState([]); useEffect(() => { setData([...data, 'Day:' + home.matchsPlayed, selectedHomeName + ':' + home.totalCal]); },[home.matchsPlayed, home.totalCal, selectedHomeName]); console.log('data', [data]); teamwins用作3个对象的数据数组推入而不是像现在这样拥有单个对象?我希望我的数据看起来像我在问题顶部说的那样。

matchs

我在这里转载了此案=> console log (为了观看演示,必须安装一个Chrome扩展程序来解除对CORS的阻止,我使用了CORS Unblock)

1 个答案:

答案 0 :(得分:1)

一个问题有很多代码,我没有深入研究,我只关注如何将数据设置为您所要求的正确数据结构。

为此,您可能需要在useEffect的第57行更改Details.js

useEffect(() => {
  setData(prev =>
    prev.concat([
      {
        day: home.matchsPlayed,
        [selectedHomeName]: home.winHome
      }
    ])
  );
}, [home.matchsPlayed, home.winHome, selectedHomeName]);