javascript - React Hook,来自不同 Axios 调用的对象数组
问题描述
我懂了:
import React, { useState, useEffect } from 'react';
import axios from "axios";
function InsideRacesComponent() {
const route = "http://localhost:4000/api/standings";
const [data, setData] = useState([{ raceName: "", raceCountryFlag: "" }]);
useEffect(() => {
axios.get(route).then(res => {
//The arrays that I want to fetch data and combine
const raceNameData = res.data[0].InsideRaceResults
const raceCountryData = res.data[0].RaceResults
raceNameData.forEach(races => {
const raceName = races.gpId;
});
raceCountryData.forEach(races => {
const flagLink = races.gpCountryImage;
})
})
}, []);
return (
//some html
)
}
如果我记录raceNameData,它看起来像这样:
(17) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {_id: "5fe8c55830013624e4716eed", gpId: "Austrian Grand Prix", grandPrixDate: "Sunday, July 5", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)}
1: {_id: "5fe8c55830013624e4716f02", gpId: "Styrian Grand Prix", grandPrixDate: "Sunday, July 12", grandPrixTrack: "Red Bull Ring", RaceResult: Array(20)}
2: {_id: "5fe8c55830013624e4716f17", gpId: "Hungarian Grand Prix", grandPrixDate: "Sunday, July 19", grandPrixTrack: "Hungaroring", RaceResult: Array(20)}
...
像这样的raceCountryData:
(17) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {_id: "5fe8c55830013624e4716edc", gpCountryName: "Austria", gpCountryImage: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Austria.svg/1200px-Flag_of_Austria.svg.png"}
1: {_id: "5fe8c55830013624e4716edd", gpCountryName: "Austria", gpCountryImage: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Austria.svg/1200px-Flag_of_Austria.svg.png"}
2: {_id: "5fe8c55830013624e4716ede", gpCountryName: "Hungary", gpCountryImage: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Hungary.svg/1920px-Flag_of_Hungary.svg.png"}
...
当我从 React Hook 记录数据时,我正在寻找这个
console.log("data: " + data);
// data: [{ raceName: "Austrian Grand Prix", raceCountryFlag: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Austria.svg/1200px-Flag_of_Austria.svg.png" }, { raceName: "Styrian Grand Prix", raceCountryFlag: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Austria.svg/1200px-Flag_of_Austria.svg.png" } , { raceName: "Hungarian Grand Prix", raceCountryFlag: "https://upload.wikimedia.org/wikipedia/commons/thu…lag_of_Hungary.svg/1920px-Flag_of_Hungary.svg.png" }, ...]
我已经在每个“array.forEach”中尝试过这个:
setData(prevValue => [...prevValue, { raceName: raceName, raceCountryFlag: "" }]
//and
setData(prevValue => [...prevValue, { raceName: "", raceCountryFlag: flagLink }]
当然我的方法没有逻辑......
谢谢!
解决方案
我假设raceNameData
和raceCountryData
数组具有相同的长度。用来Array.map
代替forEach
.
const data = raceNameData.map((race, index) => ({
raceName: race.gpId,
raceCountryFlag: raceCountryData[index].gpCountryImage
}));
推荐阅读
- mysql - 子查询未返回预期结果
- websocket - django 频道可以扩展以处理大流量吗?
- android - 谷歌免安装应用启动错误的活动
- jquery - 设置后jquery输入焦点消失
- spring-boot - 带有spring security的Spring Boot单元测试mvc
- php - Sagepay 表单整合
- python - python - 为什么TCP客户端变慢然后产生OSError:[Errno 99]无法分配请求的地址
- scala - 如何将火花日志文件转换为一个 CSV 文件
- jakarta-ee - 使用 @Resource 的 JNDI 查找,没有名称或查找属性
- java - Nearby.MESSAGES_API 已弃用