我一直在使用React,Redux,Redux-promise和Axios(使用openweathermap.org处理当前天气的API)构建基本的天气应用。
如果单击该按钮,则应该在控制台上显示城市(Cecciola)的天气参数。
该Action可以正确检索数据,并且由于Promise的帮助,它作为常规的有效负载传递到减速器上。
然后,将负责渲染city.name的容器连接到管理天气的reducer(以便您可以使用this.props访问它),但是如果单击按钮,则为console.log(this.props。 tempo ....)表示对象未定义。为什么?
GitHub Repo link
最佳答案
尝试您的存储库,登录到控制台this.props.tempo
在ceciola
组件的render方法中对我来说很好。
我看到错误的地方是在您的renderR()
函数中。您正在尝试使用diocane.city.name
,但是该对象没有'city'属性。
尝试:<p>{diocane.name}</p>
以获取名称。
________更新________
回应您的评论:我从回购中提取了最新版本,再次,当您单击按钮以检索数据时,一切似乎都正常。就像现在的代码一样,您正在执行以下操作:console.log(this.props.tempo[0])
因此,在第一次加载组件时,props.tempo
数组中没有任何内容,因此您会在控制台中看到undefined
。单击按钮后,您现在在数组中只有一个对象,并且该log语句可以正常工作。
我将您的render()
方法更改为:
render() {
if (this.props.tempo.length > 0) {
console.log("TEMPO", this.props.tempo[0])
console.log("ID", this.props.tempo[0].id)
}
return (
<div>
{this.props.tempo.map(t => {
return <div key={t.id}>{t.name}: {t.main.temp} </div>
})}
</div>
);
}
并注销预期的信息。您只需要在尝试访问速度道具之前先确认其是否在数组中。然后,在执行此操作时,请确保您正在访问其中的单个对象。我在上面的
return()
方法中显示了一个示例:使用map
迭代并返回带有速度对象信息的<div>
元素的新数组。