index.tsx 999 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import React from 'react';
  2. import {RouteComponentProps} from 'react-router'; //eslint-disable-line no-unused-vars
  3. import {Link} from 'react-router-dom';
  4. import {Pokemon} from '../../../api';
  5. interface Pokemon {
  6. id: number;
  7. nickname: string;
  8. }
  9. interface State {
  10. pokemon: Pokemon[];
  11. }
  12. class PokemonIndex extends React.Component<RouteComponentProps<void>, State> {
  13. public state = {
  14. pokemon: [],
  15. };
  16. public async componentDidMount(): Promise<void> {
  17. try {
  18. const data = await Pokemon.index();
  19. this.setState({pokemon: data.data});
  20. } catch (err) {
  21. // eslint-disable-next-line no-console
  22. console.log(JSON.stringify(err, null, 2));
  23. }
  24. }
  25. public render(): JSX.Element {
  26. const pokemon: JSX.Element[] = this.state.pokemon.map(
  27. (pkmn): JSX.Element => (
  28. <li key={pkmn.id}>
  29. <Link to={`/pokemon/${pkmn.id}`}>{pkmn.nickname}</Link>
  30. </li>
  31. )
  32. );
  33. return <ul>{pokemon}</ul>;
  34. }
  35. }
  36. export default PokemonIndex;