访问反应呈现方法中的对象属性
我写了一个小的反应组件,它从露天天气API获取一些数据。 取得成功,我可以在响应中获得json对象。
然后使用this.setState({})
将此响应保存到组件状态
反应开发工具显示预测对象实际上保存在状态中。
但是,当我来渲染任何数据时,我总是会得到一个错误,指出'不能读取'null'属性'预测'。
以下是反应组件和对象本身的屏幕截图。
export default class Weather extends Component {
getWeather () {
var self = this;
fetch('http://api.openweathermap.org/data/2.5/weather?zip=sl44jn,uk&units=metric&APPID=ed066f80b6580c11d8d0b2fb71691a2c')
.then (function (response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' + response.status);
return;
}
response.json().then(function(data) {
self.setWeather(data);
});
})
.catch (function (err) {
console.log('Fetch Error :-S', err);
});
}
setWeather (forecast) {
console.log(forecast);
this.setState({
forecast: forecast.name
})
}
componentWillMount () {
this.getWeather();
}
componentDidMount () {
// window.setInterval(function () {
// this.getWeather();
// }.bind(this), 1000);
}
render() {
return (
<h1>{this.state.forecast}</h1>
)
}
}
这是数据对象本身,现在我只是试图访问name属性。
看起来你忘了几件事情,为了一个Component
setState
你需要将它绑定到this
最好在构造函数中。 您还需要设置初始状态,在您的情况下为空对象,并且可以将整个响应保存在对象中,并只访问所需的部分。 看一看:
export default class Weather extends Component {
constructor() {
super();
this.state = {
forecast: {}
};
this.setWeather = this.setWeather.bind(this);
}
getWeather () {
let self = this;
fetch('http://api.openweathermap.org/data/2.5/weather?zip=sl44jn,uk&units=metric&APPID=ed066f80b6580c11d8d0b2fb71691a2c')
.then (function (response) {
if (response.status !== 200) {
console.log('Looks like there was a problem. Status Code: ' + response.status);
return;
}
response.json().then(function(data) {
self.setWeather(data);
});
})
.catch (function (err) {
console.log('Fetch Error :-S', err);
});
}
setWeather (forecast) {
this.setState({
forecast: forecast
});
}
componentWillMount() {
this.getWeather();
}
render() {
const { forecast } = this.state;
return (
<h1>{forecast.name}</h1>
)
}
}
链接地址: http://www.djcxy.com/p/36219.html