리액트에서 API 호출로 반환 받은 값을 렌더링 하는 기본 패턴
import { useEffect, useState } from "react";
// axios import
export default function App() {
const [products, setProducts] = useState();
useEffect(() => {
axios.get('http://localhost:4000/products').then(response => {
setProducts(response.date);
});
}, []);
return (
<div className="App">
<h1>상품 목록 페이지</h1>
<ul>
{products && products.map(products => {
return <li>{products.name}</li>
})}
</ul>
</div>
);
}
코드 로직을 보면
- 반환 값을 저장할 state를 만든 후
- useEffect 훅을 사용해서 의존성 배열을 비워 컴포넌트가 마운트 되었을 때에만 API 호출을 한 뒤 (안 그러면 무한 fetch 날아감)
- map 메서드를 통해 반환값에서 특정 key에 해당하는 정보를 추출한다.
매우 간단한 로직이지만 이 기본 패턴을 적어두는 이유는,
products && 으로 시작하는 부분 때문인데, 보통은 리액트를 자바스크립트로 배우는 것이 가장 먼저 선행될 것이고 나 역시 그랬는데 타입스크립트로 넘어오는 순간
반환 값이 undefined일 때의 처리도 명시해주어야 한다. 그런데 이 개념에 익숙하지 않아서 저 구문을 항상 빼 먹고 코드를 작성하는데 리액트에 처음 입문하는 분들은 습관적으로 위 패턴을 기억하면 좋을 것 같다.
products && 은 if문을 표현식으로 축약한 버전으로, 좌항이 truthy한 값이면 우항을 렌더링하라는 의미이다. 즉 products라는 반환값이 api 통신이 제대로 안 되었든 코드가 잘못 되었든 서버에 문제가 생겼든 어떠한 문제로 반환값이 없을 경우가 있으니, 없을 때는 렌더링 하지 말고 있을 때만 하라는 의미이다.
어차피 반환값이 없으면 렌더링이 안 되겠지만, 더 안전하게 코드를 작성하는 패턴이라고 생각하면 된다.
'Programing > React' 카테고리의 다른 글
모듈의 exports는 선언문에서? 하단에서? (0) | 2024.08.02 |
---|---|
Restful API Axios로 호출하는 기본 패턴 (useState, useEffect 사용) + strict mode (0) | 2024.07.27 |
함수형 컴포넌트 자동완성 VSCode 플러그인 (0) | 2024.07.27 |
Supabase + TanStack Query + Intersection Observer :: infinite scroll 구현 (0) | 2024.06.29 |
React-router-dom을 활용한 페이지 라우팅(디테일 페이지) (0) | 2024.06.27 |
댓글