https://developer.riotgames.com/docs/lol
>> 챔피언 목록 만들기
>> 챔피언 이름 클릭하면 상세 페이지 나오게 하기
▼ 코드 ▼
더보기

App.js
import Champ from './Champ';
import ChampDetail from './ChampDetail'
import {BrowserRouter as Router, Routes, Route} from 'react-router-dom';
function App() {
return (
<Router>
<div>
<Routes>
<Route exact path='/' Component={Champ} />
<Route path='/champions/:id' Component={ChampDetail} />
</Routes>
</div>
</Router>
);
}
export default App;
Champ.js
import {Link} from 'react-router-dom';
import React, { useState, useEffect } from "react";
import './ChampionGrid.css';
function Champ() {
const [champions, setChampions] = useState([]);
useEffect(() => {
fetch('https://ddragon.leagueoflegends.com/cdn/13.18.1/data/ko_KR/champion.json')
.then(response => response.json())
.then(data => setChampions(Object.values(data.data)));
}, []);
return (
<>
<h2> 챔 목록 </h2>
<div className="champ-grid">
{champions.map(champion => (
<Link to={`./champions/${champion.id}`} key={champion.key} className="champ-link">
<img src={`http://ddragon.leagueoflegends.com/cdn/img/champion/loading/${champion.id}_0.jpg`} alt="{champion.name}" style={{width:'70px', height:'auto'}} />
{champion.name}
</Link>
))}
</div>
</>
)
}
export default Champ;
ChampDetail.js
import React, { useState, useEffect } from "react";
import { useParams } from "react-router-dom";
function ChampDetail() {
const {id} = useParams();
const [champion, setChampion] = useState(null);
useEffect(() => {
fetch(`https://ddragon.leagueoflegends.com/cdn/13.18.1/data/ko_KR/champion/${id}.json`)
.then(response => response.json())
.then(data => setChampion(data.data[id]));
}, [id]);
if(!champion) {
return <div> Loading... </div>
}
return (
<>
<h1> {champion.name} </h1>
<h2> {champion.title} </h2>
<p> {champion.blurb} </p>
</>
)
}
export default ChampDetail;
ChampionGrid.css
.champ-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 50px;
}
.champ-link {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
border-radius: 5px;
width: 200px;
height: auto;
padding: 10px;
background-color: aliceblue;
}
예시)


'FrontEnd > React' 카테고리의 다른 글
[React] JSX와 state, onClick, Component (코딩애플 유튜브 무료강의) (0) | 2024.03.28 |
---|---|
[React] 리액트 다시 처음부터 시작해보기 (코딩애플 유튜브 무료강의) (0) | 2024.03.28 |
[React] React : Styling (0) | 2023.09.15 |
[React] 간단실습.02 (장바구니, 타이머, 색깔상자) (0) | 2023.09.13 |
[React] 헷깔리는 것 정리 (0) | 2023.09.13 |