【发布时间】:2016-07-19 23:14:13
【问题描述】:
我正在尝试构建一个天气应用程序。我有一个搜索栏组件,它通过 api 获取数据并设置最初为 null 的天气道具的状态:
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} 我会收到此错误:
未捕获的类型错误:无法读取 null 的属性“城市”
这就是我感到困惑的地方。当使用 this.props.weatherData 返回一个对象时,它怎么可能为 null?
【问题讨论】:
-
它应该如何呈现一个对象字面量? “对象作为 React 子级无效”
-
可能发生的情况是您没有取回数据。也许天气电话不起作用。你能在promise中记录数据吗?因为您天气为“空”,它显示为对象类型。我认为 state.weather 永远不会更新。
-
在我的 handleclick 函数中的 this.setState 链接之后添加了 console.log 行并返回:Object {city: Object, cod: "200", message: 0.008, cnt: 40, list: Array[ 40]}
-
this.props.weatherData.city是null因为 --> 你的初始状态 -->weather: null并且只有在你从 api 获取数据后才会被设置 -
@deowk 您的评论解决了 OP 问题的一个重要部分。我应该将其编辑到下面的答案中吗?
标签: javascript reactjs react-router