访问反应呈现方法中的对象属性

我写了一个小的反应组件,它从露天天气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

上一篇: accessing object attributes in the react render method

下一篇: How to avoid adding of inject method for each view?