Перечислить все элементы из массива

#javascript #arrays #reactjs

#javascript #массивы #reactjs

Вопрос:

Я новичок в react / веб-разработке и попробовал свой первый проект. Для начала я хочу только перечислить всех покемонов из JS object в <li> . Я не могу понять, что не так. ошибки нет.

Это мой код:

 import React from "react";
import "./App.css";

var Pokedex = require("pokedex-promise-v2");
var P = new Pokedex();

class PokemonsList extends React.Component {
  constructor(props) {
    super(props);
    this.state = { pokemonList: [] };
    this.retrievePokemonList = this.retrievePokemonList.bind(this);
  }

  retrievePokemonList() {
    P.getPokemonsList()
    .then(function (response) {
      const listItems = response.results.map((d) => <li key={d.name}>{d.name}</li>);
      this.setState({
        pokemonList: listItems
      })
    })
    .catch(function(error) {
      console.log(error);
    });
  }

  render() {
    //const listItems = response.results.map((d) => <li key={d.name}>{d.name}</li>);

    return (
      <div onLoad={this.retrievePokemonList}>
        <h1>test</h1>
        <div>{this.state.pokemonList}</div>
      </div>
    );
  }
}

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <PokemonsList></PokemonsList>
      </header>
    </div>
  );
}

export default App;
  

В веб-консоли (F12) это: Unchecked runtime.lastError: The message port closed before a response was received.

Где моя ошибка? Как я могу отобразить всех этих покемонов. Заранее спасибо

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

1. не могли бы вы console.log(response.results)

2. lol для catch и Pokemon в том же вопросе

Ответ №1:

Вот исправленный ваш код:

 import React from 'react';
import PokedexLib from 'pokedex-promise-v2';

class PokemonsList extends React.Component {
  constructor(props) {
    super(props);
    this.state = { pokemonList: [] };
    this.Pokedex = new PokedexLib();
  }

  componentDidMount() {
    this.Pokedex.getPokemonsList()
      .then(response => {
        this.setState({
          pokemonList: response.results,
        });
      })
      .catch(function (error) {
        console.log(error);
      });
  }

  render() {
    return (
      <div>
        <h1>Pokemon List</h1>
        <div>
          {this.state.pokemonList.map(pokemon => (
            <li key={pokemon.name}>{pokemon.name}</li>
          ))}
        </div>
      </div>
    );
  }
}

function App() {
  return (
    <div className='App'>
      <header className='App-header'>
        <PokemonsList></PokemonsList>
      </header>
    </div>
  );
}
export default App;

  

Пожалуйста, обратите внимание на 2 вещи: все вызовы API лучше выполнять в методе componentDidMount, а другое дело, что вы можете отобразить список внутри метода render с помощью метода map .. с уважением