我想用我从下拉菜单中选择的团队wins
的{{3}}构建图表。
我正在使用recharts从我要选择的日期获取wins
和matchs
的数字。
图表中使用的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);
});
};
}
我调度包含teamStats
和matchs played
的{{1}}对象。
wins
在组件中,这就是我尝试创建dispatch(receivedTeamsStat(teamStats, type, name))
数组的方式
data
这是我选择圣保罗时数据的外观
我的难题是如何将选择的 const [data, setData] = useState([]);
useEffect(() => {
setData([...data, 'Day:' + home.matchsPlayed, selectedHomeName + ':' + home.totalCal]);
},[home.matchsPlayed, home.totalCal, selectedHomeName]);
console.log('data', [data]);
,team
,wins
用作3个对象的数据数组推入而不是像现在这样拥有单个对象?我希望我的数据看起来像我在问题顶部说的那样。
matchs
我在这里转载了此案=> (为了观看演示,必须安装一个Chrome扩展程序来解除对CORS的阻止,我使用了CORS Unblock)
答案 0 :(得分:1)
一个问题有很多代码,我没有深入研究,我只关注如何将数据设置为您所要求的正确数据结构。
为此,您可能需要在useEffect
的第57
行更改Details.js
:
useEffect(() => {
setData(prev =>
prev.concat([
{
day: home.matchsPlayed,
[selectedHomeName]: home.winHome
}
])
);
}, [home.matchsPlayed, home.winHome, selectedHomeName]);