TypeError:无法读取未定义的属性(读取“country”)
2021-12-06
12222
我尝试从 API 获取数据并在我的应用中使用该数据。但问题是,当我尝试从刚从 API 获得的 JSON 中获取某个对象或数据时,我收到 TypeError:无法读取未定义的属性“country”。 该属性确实存在。 顺便说一句,我正在使用 React.js。 非常感谢您的帮助和指导。 这是代码:
App.js
{typeof weather != 'undefined' ? (
<div>
<div className="location-box">
<div className="location">
{weather.name},{weather.sys.country}
</div>
<div className="date"> {dateBuilder(new Date())} </div>
</div>
<div className="weather-box">
<div className="weather-temperature">15*C</div>
<div className="weather">Sunny </div>
</div>
</div>
) : ("NULL")}
我们将从中获取数据的 API。
function App() {
const [query, setQuery] = useState("");
const [weather, setWeather] = useState({});
const Search = (evt) => {
if (evt.key === "Entre") {
debugger;
fetch(`${api.base}weather?q=${query}&units=metric&APPID${api.key}`)
.then((res) => res.json())
.then((result) => {
setWeather(result);
setQuery("");
console.log(result);
});
}
};
}
2个回答
如果您确定该属性确实存在,那么它一定是初始渲染。您使用
{} 初始化
useStaet
,但要防止
undefined
。
因此,将
useState({})
更改为
useState()
。
const [weather, setWeather] = useState();
您还可以在读取
country
时添加空检查。
{weather.name}, {weather.sys?.country}
Ayman El Temsahi
2021-12-06
问题出在您的天气检查上:
typeof weather != 'undefined'
,而您的天气初始值为
{
。为了解决这个问题,不要为天气设置初始值。像这样:
const [weather, setWeather] = useState();
因此,在第一次渲染中,天气值将为
undefined
,而在下一次渲染中,它包含您的 api 响应。
Saeed Shamloo
2021-12-06