可以't从子组件访问状态
Can't access state from child component
我正在尝试构建一个天气应用程序。我有一个searchbar组件,它通过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},我会得到这个错误:
未捕获的类型错误:无法读取空的属性"city"
这就是我感到困惑的地方。当一个对象返回this.props.weatherData时,它怎么可能为null?
听起来AJAX请求返回的数据不仅仅是文本(这将是那些<p></p>
标记之间的有效子节点),而是一个对象,它是一个无效的子节点。
将状态的weather
属性设置为API响应返回的对象的属性,而不是整个对象。
作为对您最新评论的回应,听起来weatherData.city
本身就是一个需要解析的对象。你可以通过更好地学习API自己解决这个问题,而我们对此一无所知。
正如@deowk在评论中指出的那样,您的第二个错误是由父组件的初始状态{weather: null}
引起的。首次呈现子组件时,它尝试在该null
对象上查找city
属性。您不再收到该错误,因为您现在正在API回调中执行查找,而不是在子组件本身中执行查找。
- 从vuejs中的组件模板访问父方法
- 回流:让多个组件访问同一个Store
- 访问vue组件中的ID标记
- Angular 2-如何从ControlGroup访问子组件
- 如何从Vue.js中的子组件访问父方法
- 访问Vuejs组件内部的元素
- 访问要在 React Native Text 组件中显示的对象数组
- 如何从一个组件访问另一个组件的状态
- 对自定义组件中的本地访问引用进行反应
- 动态添加子组件值时,如何从父组件访问这些值
- 如何访问Vue.js中深度嵌套的子组件中的数据
- 每次加载页面时,火狐附加组件访问变量
- React.js:从独立组件访问整个应用程序状态
- Vue.js从子组件访问父/根数据
- 从另一个组件访问函数内的React组件
- ReactJS:从基本组件访问上下文
- 从深度嵌套的组件访问redux分派
- 从子组件访问父组件/属性
- 可以't从子组件访问状态
- 从react组件访问环境变量