@JekaHC

Как добавить кнопку «показать больше» на каждую карточку?

Есть компоненты:

Main.jsx
import { useState, useEffect } from "react";

import { Preloader } from "../Preloader";
import { Pokemons } from "../Pokemons";
import { LoadMore } from "../LoadMore";

function Main() {
  const [pokemons, setPokemons] = useState([]);
  const [loading, setLoading] = useState(true);
  const [pokemonsPerPage] = useState(20);
  const [page, setPage] = useState(1);

  function getPokemons(pokemonOffset) {
    fetch(
      `https://pokeapi.co/api/v2/pokemon?limit=${pokemonsPerPage}&offset=${pokemonOffset}`
    )
      .then((responce) => responce.json())
      .then((data) => {
        data.results && setPokemons((p) => [...p, ...data.results]);
        setLoading(false);
      });
  }

  useEffect(() => {
    const offset = page * pokemonsPerPage - pokemonsPerPage;

    getPokemons(offset);
  }, [page]);

  return (
    <main className="container content">
      {loading ? <Preloader /> : <Pokemons pokemons={pokemons} />}
      <LoadMore next={() => setPage((p) => p + 1)} />
    </main>
  );
}

export { Main };

Pokemon.jsx
import React from "react";
import { useState, useEffect } from "react";
import { TailSpin } from "react-loader-spinner";

function Pokemon({ name, url }) {
  const [data, setData] = useState(null);

  useEffect(() => {
    fetch(url)
      .then((r) => r.json())
      .then(setData);
  }, [url]);

  return (
    <div>
      {data ? (
        <div className="card animate__animated animate__bounceInUp">
          <div className="card-image">
            <img src={data.sprites.front_default} />
            <span className="card-title">{name}</span>
            {/* {???.map((item, index) => (
              <div key={index}>
                <button onClick={()=> {??? }}>Sakra</button>
              </div>
            ))} */}
          </div>
          <div className="card-content">
            {data.abilities.map((n, index) => (
              <p key={index}>{n.ability.name}</p>
            ))}
          </div>
        </div>
      ) : (
        <div>
          <TailSpin type="Puff" color="purple" height={100} width={100} />
        </div>
      )}
    </div>
  );
}

export { Pokemon };

Нужно, чтобы у каждой карты (покемона) была кнопка "Подробности", которая при нажатии отображает дополнительную (уникальную) информацию из запроса fetch в "url" для выбранной карты.

Я думаю, что мне нужно сделать это в Pokemon.jsx, ибо в Main.jsx существующий fetch запрос не подходит.
  • Вопрос задан
  • 630 просмотров
Пригласить эксперта
Ответы на вопрос 1
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
Вам сюда https://freelance.habr.com
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы