카테고리 없음

Til (2023.02.24)

prdg 2023. 2. 28. 18:15

ChatGPT무한 스크롤

 

chatGPT가 재밌어 보여서 질문을 조합해 게임 api사이트 하나를 이용한 무한 스크롤을 구현해 봤다.

gpt에 질문할때는 자세하게 원하는 정보와 원하는 부분을 말하는게 더 정확한 정보를 주는 것 같았다.

실행했을때 검색도 잘되고, 무한스크롤도 잘 작동한다. 이미지와 제목도 잘 불러와졌다.

아래코드는 거기서 내가 변형해 steam안에있는 게임만 검색결과로 나오게 한 것이다.

import React, { useState, useEffect } from "react";
import axios from "axios";
import InfiniteScroll from "react-infinite-scroll-component";

interface Game {
  external_games: any;
  id: number;
  name: string;
  background_image: string;
}

const GameSearch = (): JSX.Element => {
  const [searchTerm, setSearchTerm] = useState<string>("");
  const [games, setGames] = useState<any>([]);
  const [page, setPage] = useState<number>(1);
  const [steamId, setSteamId] = useState<any>();

  const fetchGames = async (): Promise<void> => {
    const response = await axios.get(
      `https://api.rawg.io/api/games?key=212ed5f02b3040e8a0c27dd8d8f06486&page=${page}&search=${searchTerm}`
    );
    const data = response.data.results as Game[];
    setGames((games: any) => [...games, ...data]);
    setPage((page) => page + 1);
  };
  console.log(steamId);
  const aaa = games.filter((i: any) => {
    return i?.stores && i?.stores[0].store.name === "Steam";
  });
  console.log(aaa);

  const handleSearch = (event: React.ChangeEvent<HTMLInputElement>): void => {
    setSearchTerm(event.target.value);
    setGames([]);
    setPage(1);
  };

  useEffect(() => {
    fetchGames();
  }, [searchTerm]);

  return (
    <div>
      <input type="text" value={searchTerm} onChange={handleSearch} />

      <InfiniteScroll
        dataLength={games.length}
        next={fetchGames}
        hasMore={true}
        loader={<h4>Loading...</h4>}
      >
        {aaa.map((game: any) => (
          <div key={game.id}>
            <h2>{game.name}</h2>
            <img src={game.background_image} alt={game.name} />
          </div>
        ))}
      </InfiniteScroll>
    </div>
  );
};

export default GameSearch;