【发布时间】:2020-10-19 20:01:40
【问题描述】:
我正在尝试调用一个 API 来获取天气数据,我需要将每个返回的数据添加到数组状态。但它不起作用,它只显示最后添加的数据。有人可以解释一下为什么会这样并给我一个解决方案
import React, {useEffect, useState} from 'react';
import './App.css';
const data = require('../src/data/Step1'); //Importing json file
const axios = require("axios");
function App() {
//React Hook to save weather data
const [weatherData, setWeatherData] = useState([]);
//UseEffect to call getData function
useEffect(() => {
//call getData for each sending city code one by one
data.List.map(city => getData(city.CityCode));
}, []);
//getData function
async function getData(cityCode) {
//Axios get request to http get request
const response = await axios.get('http://api.openweathermap.org/data/2.5/group?id=' + cityCode + '&units=metric&appid=24e343673cb58392072a12e4705b1260');
//adding each weather object to weather data Array
setWeatherData([...weatherData,response.data.list[0]]);
}
if (weatherData.length > 1) {
return (
<div>
{
<div className="container mt-5">
{weatherData.map(x => (
<div className="row mt-2 ">
Id : {x.data.id} {" | "}
Name :{x.data.name} {" | "}
Description : {x.data.weather[0].description} {" | "}
Temperature : {x.data.main.temp}
</div>
))}
</div>
}
</div>
);
} else {
return (
<div>
<h1>Loading</h1>
</div>
)
}
}
export default App;
【问题讨论】:
标签: javascript reactjs axios