Как заполнить выпадающий список данными api в React?

#reactjs

#reactjs

Вопрос:

Я пытаюсь заполнить параметры выпадающего списка всеми заголовками из этого API.

Я пытаюсь:

  • Сохраните заголовки в заголовках: [] объект
  • Сопоставьте все эти заголовки с отдельными элементами

Но я получаю сообщение об ошибке

Необработанное отклонение (TypeError): невозможно преобразовать undefined или null в object

Может кто-нибудь указать мне правильное направление?

     import React from "react"
import Header from "./Header"
import CardContent from "./CardContent"
import axios from "axios";

class CardContainer extends React.Component {
  state = {
    display: [],
    titles: []
  };

  componentWillMount = (e) => {
    axios.get("https://ghibliapi.herokuapp.com/films")
      .then(response => this.setState({
        titles: response.data[Object.keys(response.data.title)],
        display: response.data[Math.floor(Math.random() * response.data.length)]
      }))
  }

  render() {
    return (
      <div className="container">
        <Header />
        <select>
          {this.state.titles.map(title => (
            <option key={title} value={title}>
              {title}
            </option>
          ))}
        </select>    
  

Ответ №1:

Вы действительно должны использовать componentDidMount для выборки данных, но основная проблема заключается в том, что вам, похоже, нужен массив всех заголовков, поэтому вам нужно сопоставить данные ответа и создать этот массив.

 componentDidMount = (e) => {
  axios.get("https://ghibliapi.herokuapp.com/films").then((response) =>
    this.setState({
      titles: response.data.map(({ title }) => title), // <-- map titles
      display: response.data[Math.floor(Math.random() * response.data.length)]
    })
  );
};
  

Редактировать как заполнить выпадающий список с помощью api-данных в реакции

Комментарии:

1. В настоящее время this.state.display извлекает случайный заголовок, описание и т. Д. И Отображает их На странице в таблицах и т. Д. Есть кнопка, которая выполняет handleChange() и повторно обновляет this.state.display до случайного фильма. Я планирую настроить другой прослушиватель событий в раскрывающемся списке select, чтобы обновить this.state.display для выбранного фильма.

2. @esvnt Ах, кк. Как я уже сказал, я просто угадал из фрагмента. Удачи.

Ответ №2:

Вы получаете сообщение об ошибке как «Необработанное отклонение (ошибка типа): невозможно преобразовать undefined или null в object» из-за ответа.данные представляют собой массив. Object.key() может применяться только к объектам. Попробуйте функцию map(), чтобы извлекать объекты один за другим.