как setState реагировать, используя unirest - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь сделать запрос на получение от сервера с использованием React и Unirest и сохранить информацию, которая возвращается в переменную с setState, но я всегда получаю одну и ту же ошибку.

TypeError: Невозможно прочитать свойство 'getData' из неопределенного.

export default class ApartmentsRow extends React.Component {
    constructor(props) {
        super(props);

        this.state = {
            data:[]
        };
      }
    componentDidMount(){
        var req = unirest("GET", "https://realtor.p.rapidapi.com/properties/detail");
        req.query({
            "listing_id": "608763437",
            "prop_status": "for_sale",
            "property_id": "4599450556"
        });  
        req.headers({
            "x-rapidapi-host": "realtor.p.rapidapi.com",
            "x-rapidapi-key": "34b0f19259mshde1372a9f2958e5p13e3cdjsnf2452cd81a81"
        });       
        req.end(function (res) {
            if (res.error) throw new Error(res.error);

            console.log(res.body);
            this.getData(res.body.listing)
        });
    }

    getData = (allData) =>{
    this.setState({
        data:allData
    })
}

1 Ответ

0 голосов
/ 01 апреля 2020

потому что this в вашей точке обратного вызова на the callback, а не на экземпляр класса, используйте функцию стрелки, подобную этой

req.end(res => {
  if (res.error) throw new Error(res.error);
  this.setData(res.body.listing)
});

, также вы должны изменить getData -> setData

setData = data => {
  this.setState({ data})
}

или просто удалите setData, затем используйте setState внутри обратного вызова

req.end(res => {
  if (res.error) throw new Error(res.error);
  this.setState({ data: res.body.listing });
});
...