我在尝试构建天气应用程序。我有一个通过API获取数据,并设置了天气支撑其最初是空的状态的搜索栏组件:无法从子组件中访问状态
getInitialState: function() {
return {text: '', weather: null};
},
handleClick: function() {
WeatherApi.get('q=' + this.state.text).then(function(data) {
this.setState({weather: data})
}.bind(this));
},
我想要做的就是通过天气道具的状态,以一个孩子组元,一旦通过用户设置:
<TodaysWeatherContainer weatherData={this.state.weather} />
然后是从组件获取访问是这样的:
var TodaysWeatherContainer = React.createClass({
render: function() {
return (
<div>
<p>{this.props.weatherData}</p>
</div>
);
}
});
现在,当我搜索一个城市,我得到以下错误:
未捕获(承诺)错误:对象作为React子项(找到:具有键{city,cod,message,cnt,list}的对象)无效。如果您打算渲染一组儿童,请改用数组,或者使用React附加组件中的createFragment(object)来包装对象。检查渲染方法TodaysWeatherContainer
。
如果我添加{} this.props.weatherData.city我得到这个错误:
遗漏的类型错误:无法读取空
的特性“城市”这就是我越来越糊涂了。当使用this.props.weatherData返回一个对象时,它怎么会为null?
它应该如何呈现对象文字? “对象不适合作为React的孩子” –
可能发生的事情是您没有获取数据。也许天气通话不起作用。你可以在承诺中记录数据吗?因为你天气到'空',这显示为类型对象。我认为state.weather从不更新。 – JordanHendrix
在我的handleclick函数中添加了console.log后面的this.setState行,并返回:Object {city:Object,cod:“200”,message:0.008,cnt:40,list:Array [40]} – Banner