useEffect를 사용하여 API 데이터를 가져오고 화면에 출력하는 방법을 정리합니다.
React에서 데이터를 가져오는 작업은
매우 자주 사용됩니다.
예를 들어
게시글 목록
사용자 정보
상품 목록
댓글 목록
이러한 데이터는
보통 서버에서 가져옵니다.
React에서는
useEffect를 사용하여 API 데이터를 가져옵니다.
✔ API 데이터 가져오기
✔ fetch 사용 방법
✔ useEffect와 함께 사용
✔ 로딩 처리
✔ 에러 처리
서버 데이터를 가져옵니다
렌더링 이후 실행합니다
useState로 데이터 저장합니다
React에서 API 데이터를 가져오는 흐름은 다음과 같습니다.
useState 생성
↓
useEffect 실행
↓
API 호출
↓
데이터 저장
↓
화면 출력
이 흐름을 이해하는 것이 중요합니다.
먼저 기본 구조를 보겠습니다.
import { useState, useEffect } from "react";
function App() {
const [data, setData] = useState([]);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts")
.then(res => res.json())
.then(data => setData(data));
}, []);
return (
<div>
{data.map(item => (
<p key={item.id}>{item.title}</p>
))}
</div>
);
}이 코드 흐름
컴포넌트 렌더링
↓
useEffect 실행
↓
API 호출
↓
데이터 저장
↓
화면 출력
먼저 데이터를 저장할 state를 만듭니다.
const [data, setData] = useState([]);👉 API 데이터를 저장할 공간입니다.
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts")
}, []);👉 컴포넌트가 처음 렌더링될 때 실행됩니다.
fetch는 데이터를 바로 사용할 수 없습니다.
그래서 JSON으로 변환해야 합니다.
.then(res => res.json()).then(data => setData(data))👉 데이터를 state에 저장합니다.
{data.map(item => (
<p key={item.id}>{item.title}</p>
))}👉 map을 사용하여 화면에 출력합니다.
데이터가 가져오기 전까지
로딩 화면을 보여줄 수 있습니다.
const [loading, setLoading] = useState(true);useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts")
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
});
}, []);if (loading) return <p>로딩중...</p>;에러 처리도 함께 하는 것이 좋습니다.
const [error, setError] = useState(null);useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts")
.then(res => res.json())
.then(data => setData(data))
.catch(err => setError(err));
}, []);if (error) return <p>에러 발생</p>;import { useState, useEffect } from "react";
function App() {
const [data, setData] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
fetch("https://jsonplaceholder.typicode.com/posts")
.then(res => res.json())
.then(data => {
setData(data);
setLoading(false);
})
.catch(err => setError(err));
}, []);
if (loading) return <p>로딩중...</p>;
if (error) return <p>에러 발생</p>;
return (
<div>
{data.map(item => (
<p key={item.id}>{item.title}</p>
))}
</div>
);
}React에서 API 호출은
보통 useEffect 안에서 실행합니다.
그리고 실무에서는
loading
error
data
이 세 가지 상태를 함께 관리하는 것이 좋습니다.
이 패턴은 실무에서 매우 많이 사용됩니다.
이번 글에서는
API 데이터를 가져오는 방법을 알아봤습니다.
✔ useEffect 사용
✔ fetch 사용
✔ 데이터 저장
✔ 로딩 처리
✔ 에러 처리
다음 글에서는
Context API 상태 관리를 알아보겠습니다.