metalcore18
@metalcore18
Junior JS Dev

React-native, PropertyFinderApp, request?

Разбираю реакт натив. Делаю прогу на андроид по этому туториалу
Короче, беда такая, отправляю запрос, в консоли видно что возвращает 20 подходящих обьектов, но почему то не разбирает респонс на значения. Скрины и код ниже.

SearchPage - исходная страница поиска где формируется запрос
function urlForQueryAndPage(key, value, pageNumber) {
  var data = {
      country: 'uk',
      pretty: '1',
      encoding: 'json',
      listing_type: 'buy',
      action: 'search_listings',
      page: pageNumber
  };
  data[key] = value;
 
  var querystring = Object.keys(data)
    .map(key => key + '=' + encodeURIComponent(data[key]))
    .join('&');
 
  return 'http://api.nestoria.co.uk/api?' + querystring;
};

export default class SearchPage extends Component {

 constructor(props) {
    super(props);
    this.state = {
      searchString: 'london',
      isLoading: false,
      message: ''
    };
  }
    
onSearchTextChanged(event) {
	  this.setState({ searchString: event.nativeEvent.text });
	}

onSearchPressed() {
  var query = urlForQueryAndPage('place_name', this.state.searchString, 1);
  this._executeQuery(query);
}

_executeQuery(query) {
  this.setState({ isLoading: true });
  console.log(query);
  
  fetch(query)
  .then(response => response.json())
  .then(json => this._handleResponse(json.response))
  .catch(error =>
     this.setState({
      isLoading: false,
      message: 'Something bad happened ' + error
   }));
}
 
_handleResponse(response) {
  this.setState({ isLoading: false , message: '' });
  if (response.application_response_code.substr(0, 1) === '1') {
  console.log('Properties found: ' + response.listings.length);
  
  this.props.navigator.push({
    id: 'SearchResults',
    name: 'SearchResults',
    passProps: {listings: response.listings}
    
});
console.log(passProps);
  } else {
    this.setState({ message: 'Location not recognized; please try again.'});
  }
}


SearchResults - где респонс значения вставляются в таблицу

export default class SearchResults extends Component {
 
constructor(props) {
    super(props);
    var dataSource = new ListView.DataSource(
      {rowHasChanged: (r1, r2) => r1.lister_url !== r2.lister_url});
    this.state = {
      dataSource: dataSource.cloneWithRows(this.props.listings)
    };
  }
 
  renderRow(rowData, sectionID, rowID) {
    return (
      <TouchableHighlight
          underlayColor='#dddddd'>
        <View>
          <Text>{rowData.title}</Text>
        </View>
      </TouchableHighlight>
    );
  }
 
  render() {
    return (
      <ListView
        dataSource={this.state.dataSource}
        renderRow={this.renderRow.bind(this)}/>
    );
  }
 
}


Получаю такую ошибку в ответе (обведена красным)
ce6083a9cf8c469581b9850dd9ae48d4.JPG

Респонсы приходят!
4db2f2bf87e2403d88871bf33c980ce9.JPG
  • Вопрос задан
  • 162 просмотра
Пригласить эксперта
Ответы на вопрос 1
@LiguidCool
Ну так выкиньте в консоль что там за объект тупо через .then(console.log(response )) ... Ну и дальше по очереди их отлаживайте. Скорее всего где то к несуществующему параметру обращаетесь.
Кстати this.props.navigator.push WTF? Нельзя напрямую писать в пропсы!
this.state = { ... И так низя! Хотя может в Native'е можно ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы