在反应中获取 api 时获取无法读取未定义的属性
getting cannot read properties of undefiend when fetching api in react
我正在处理 api,当我 console.log(data.city)
时,它会给出结果,但如果我添加 console.log(data.city.name)
,它会显示 undefined
。在控制台中,我得到了结果,但在重新加载后出现了这个错误。
此外,当第一个控制台是空数组然后第二个是数据时。
const [cityName, setCityName] = useState('delhi');
const [data,setData] = useState([]);
const getWeatherInfo = async () => {
await fetch(
`https://api.openweathermap.org/data/2.5/forecast?q=delhi&units=metric&appid=4beffc863037e89f0f181d893d1cf79b`)
.then(res => res.json())
.then((data)=> {
setData(data)
})
.catch((err)=> {
console.log('error' + err);
})
};
console.log(data.city.name);
useEffect(() => {
getWeatherInfo();
}, []);
您将状态初始化为一个空数组,因此元素 city
在第一次渲染时不存在,从而导致错误。
您可以仅在关键城市存在时通过记录来解决此问题,如:
if (data.city) {
console.log(data.city.name);
}
为什么默认状态定义为数组?如我所见,没有数组响应,所以最好将默认状态定义为空。
const [data,setData] = useState(null);
然后你可以使用?
代替if语句
console.log(data?.city?.name);
我正在处理 api,当我 console.log(data.city)
时,它会给出结果,但如果我添加 console.log(data.city.name)
,它会显示 undefined
。在控制台中,我得到了结果,但在重新加载后出现了这个错误。
此外,当第一个控制台是空数组然后第二个是数据时。
const [cityName, setCityName] = useState('delhi');
const [data,setData] = useState([]);
const getWeatherInfo = async () => {
await fetch(
`https://api.openweathermap.org/data/2.5/forecast?q=delhi&units=metric&appid=4beffc863037e89f0f181d893d1cf79b`)
.then(res => res.json())
.then((data)=> {
setData(data)
})
.catch((err)=> {
console.log('error' + err);
})
};
console.log(data.city.name);
useEffect(() => {
getWeatherInfo();
}, []);
您将状态初始化为一个空数组,因此元素 city
在第一次渲染时不存在,从而导致错误。
您可以仅在关键城市存在时通过记录来解决此问题,如:
if (data.city) {
console.log(data.city.name);
}
为什么默认状态定义为数组?如我所见,没有数组响应,所以最好将默认状态定义为空。
const [data,setData] = useState(null);
然后你可以使用?
代替if语句
console.log(data?.city?.name);