【发布时间】:2021-09-09 08:50:29
【问题描述】:
所以基本上我正在学习如何调用 api,并且我在搞乱开放的天气 api,试图显示几个不同城市的名称和温度。问题是响应是数组的对象,并试图将所有城市的名称放入状态,以便我可以显示它们。让所有名称进入状态的最佳方法是什么?
import "./App.css";
import React, { useEffect, useState } from "react";
import axios from "axios";
function App() {
const [cityName, setCityName] = useState("");
const [temp, setTemp] = useState("");
const [description, setDescription] = useState("");
const fetchData = () => {
//api variables (normily stored somewhere safer)
const lat = "35.320696399999996";
const lon = "-75.8232391";
const key = "115475ac7a8dda2a7e7ec0b27b93ce35";
const cnt = "5";
const url = `https://api.openweathermap.org/data/2.5/find?lat=${lat}&lon=${lon}&cnt=${cnt}&appid=${key}`;
axios
.get(url)
.then((res) => {
console.log(res.data.list);
})
.catch((err) => {
console.log(err);
});
};
useEffect(() => {
fetchData();
}, []);
return <div className="App"></div>;
}
export default App;
【问题讨论】:
-
那么从对象数组的响应中,您需要城市名称、温度和描述吗?您能否提供示例结果或您希望从响应中解析出的内容?您的州都是空字符串,但您的问题暗示您想要一个包含城市、临时工和描述的数组。
-
对,所以我想在 cityName 州我想要 ["Buxon", "Swanquarter","Dare","Wanchese","manteo"] 所以我可以在下面映射它们并渲染他们在页面上。我会将状态更改为空数组,但我知道如何为其设置名称的唯一方法是 setState(res.data.list[0}.name) 但我不想为每个人都这样做城市。
-
您想要为每个单独的数组,还是一个具有您想要的属性的对象数组就足够了? (在 JSX 中映射单个数组会更容易)描述是什么?是来自响应数据吗?
-
单个数组是我想要为 JSX 映射的。描述也是响应,但它嵌套在天气对象中,编辑后显示它。
标签: javascript reactjs api axios fetch