我在嘗試構建天氣應用程序。我有一個通過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