
Smart-Dumb Compnent Pattern으로 불리기도 한다.
Container는 “배달 기사” (데이터를 들고 와서 전달해줌)
Presenter는 “요리사” (받은 재료로 요리만 함, 재료 수급은 신경 안 씀)
// Container: 상태 관리 + 데이터 로딩
import { useState, useEffect } from "react";
import UserCard from "./UserCard";
function UserContainer({ userId }) {
const [user, setUser] = useState(null);
useEffect(() => {
fetch(`/api/users/${userId}`)
.then(res => res.json())
.then(data => setUser(data));
}, [userId]);
if (!user) return <div>Loading...</div>;
return <UserCard user={user} />;
}
export default UserContainer;
// Presenter: 오직 화면만
function UserCard({ user }) {
return (
<div className="card">
<h2>{user.name}</h2>
<p>{user.email}</p>
</div>
);
}
export default UserCard;
[Container 컴포넌트]
└─ useState, useEffect
└─ API 요청
└─ 상태 관리
└─ 데이터 가공
└─ 렌더링: <Presenter {...props} />
[Presenter 컴포넌트]
└─ props만 받아서
└─ 화면 그리기 (return JSX)
└─ 내부 상태 없음 (또는 최소)