본 포스팅은 노마드 코더의 React JS 마스터클래스를 수강한 뒤 작성되었습니다.
아래와 같이 ()()를 사용해 코드를 작성하면 바로 실행 되는 function을 만들 수 있다.
useEffect(() => {
(async() => {
fetch("https://api.coinpaprika.com/v1/coins")
})();
}, [])
-> slice를 사용하면 된다.
아래는 예시이다.
const a = [1,2,3,4,5];
a.slice(0,2); //이렇게 하면 앞에서부터 3개의 요소들만 有
//실제 Coins.tsx에서 API에서 정보들 가져오고 앞에서부터 100개만 가져오는 예시
const [coins, setCoins] = useState<CoinInterface[]>([]);
useEffect(() => {
(async() => {
const response = await fetch("https://api.coinpaprika.com/v1/coins")
const json = await response.json();
setCoins(json.slice(0,100));
})();
}, [])
현재 우리는 https://api.coinpaprika.com/v1/coins 이 API를 사용해서, 코인 정보들을 불러오고 있다.
❗ 위의 코드상에서는 fetch를 통해 API를 불러오고 있는데, 우리는 React Query를 사용함으로써 이를 간단하게 만들 수 有!! ❗
https://coinicons-api.vercel.app/
다음 코스에서 detail 페이지를 꾸미기위한 데이터를 2개의 URL에서 가져옴
coin id로 코인 받기 (Coins)
https://api.coinpaprika.com/v1/coins/btc-bitcoin
https://api.coinpaprika.com/#operation/getCoinById
coin id로 특정 코인에 대한 시세 정보 얻기 (Tickers)
https://api.coinpaprika.com/v1/tickers/btc-bitcoin
https://api.coinpaprika.com/#operation/getTickersById
: route 안에 있는 또 다른 route
아래는 Coin.tsx의 예시 코드이다.
<Tabs>
<Tab isActive={chartMatch !== null}>
<Link to={`/${coinId}/chart`}>Chart</Link>
</Tab>
<Tab isActive={priceMatch !== null}>
<Link to={`/${coinId}/price`}>Price</Link>
</Tab>
</Tabs>
<Switch>
<Route path={`/:coinId/price`}>
<Price />
</Route>
<Route path={`/:coinId/chart`}>
<Chart />
</Route>
</Switch>
즉, Switch문을 사용해서 한번에 하나의 Route만 선택되게 만들었고, 각 tab에 해당하는 정보를 보여주는 방식으로 현재 url/price | url/char로 url를 변경하는 방법을 쓴 것이다~!
url이 변경되는 것이므로, link를 사용해서 해당하는 url로 변경해주었다.
따라서, 아래 동영상을 보면 url이 변경되는 것을 볼 수 있다.
: 해당 hook은 너가 특정한 URL에 있는지의 여부를 알려줌
//내가 coinId/price라는 URL에 있는지 확인해줘!
const priceMatch = useRouteMatch("/:coinId/price");
//내가 coinId/chart라는 URL에 있는지 확인해줘!
const chartMatch = useRouteMatch("/:coinId/chart");
if) priceMatch를 console.log해본다면, 아래와 같이 해당 url에 有는 경우 object안에 isExact의 값이 true로 되어있음을 알 수 O.
이제 받은 prop을 가지고 tab에서 진행을 해준다.
const Tab = styled.span<{ isActive: boolean }>`
color: ${(props) =>
props.isActive ? props.theme.accentColor : props.theme.textColor};
`;
<Tabs>
<Tab isActive={chartMatch !== null}>
<Link to={`/${coinId}/chart`}>Chart</Link>
</Tab>
<Tab isActive={priceMatch !== null}>
<Link to={`/${coinId}/price`}>Price</Link>
</Tab>
</Tabs>
isActive를 통해서 object을 통해서 받은 값이 null이 아닐때(해당 탭이 선택되었을떄), isActive이라는 변수에 True를 지정해주는 것.