@dimasgfree

Почему не выводятся данные из состояния 'options'?

import React, { Component } from 'react';
import axios from 'axios';

export default class App extends Component {
  state = {
    searchValue: '',
    options: [],
    roots: [],
  }

  componentDidMount () {
    axios.get(`https://swapi.co/api/`)
      .then(data => {
        var arr = [];
        for (var key in data.data) {
          arr.push(data.data[key]);
        }
        this.setState({ roots: arr });
      })
      .catch(err => console.log('Error: ', err));
  }

  onSearchChange = event => {
    this.setState({ searchValue: event.target.value });
    if (event.target.value.length >= 3) {
      let newData = [];
      this.state.roots.map((root) => {
        axios.get(`${root}?search=${this.state.searchValue}`)
          .then(data => { 
            data.data.results.map((item) => {
              const rootName = root.split('/');
              const searchItem = {
                name: item.name,
                rootName: rootName[4],
              }
              newData.push(searchItem)
            });
          })
          .catch(err => console.log('Error: ', err));
      })
      this.setState({ options: newData });
      console.log(this.state.options);
    }
  }

  render() {
    return (
      <div>
        <input value={this.state.searchValue} onChange={this.onSearchChange} />
        { this.state.options ?
          <div className="options__list">
            { this.state.options.map( (item, index) => {
              return (
                <div
                  key={ index }
                  className="options__item"
                >
                  <span className="options__text">
                    {item.name} - {item.rootName}
                  </span>
                </div>
              );
            } ) }
          </div> : null
        }
      </div>
    )
  }
}


Не выводятся данные состояния options, но если удалить то, что ввел, вроде бы показываются данные последнего запроса. Не могу понять что именно вывожу не так.
  • Вопрос задан
  • 66 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега React
Выполняете setState до получения ответа (метод onSearchChange).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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