1๏ธโฃ ๊ณผ๊ฑฐ์ ์ค๊ณ ํจ๋ฌ๋ค์: Container-Presenter ํจํด
- ์์ ์ปดํฌ๋ํธ(Container)๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ fetch
- ํ์ ์ปดํฌ๋ํธ(Presenter)๋ ์์ UI ๋ด๋น
- ๋ฐ์ดํฐ ํ๋ฆ: fetch โ setState โ props ์ ๋ฌ
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ์ปดํฌ๋ํธ ๊ณ์ธต์ผ๋ก ๊ตฌํ
const Container = () => {
const a = useFetchA();
const b = useFetchB();
return <Presenter a={a} b={b} />;
};
2๏ธโฃ ํ์ฌ์ ์ค๊ณ ํจ๋ฌ๋ค์: Suspense + ํ
+ ๊ธฐ๋ฅ ๊ธฐ๋ฐ ๋ถ๋ฆฌ
- ์ปดํฌ๋ํธ๊ฐ ์ง์
useQuery
๋ก ๋ฐ์ดํฐ fetch
- Suspense๋ก ๋ก๋ฉ/ํ์ด๋ฐ ์ฒ๋ฆฌ
- ํ
์ผ๋ก ๋ก์ง ๋ถ๋ฆฌ, UI๋ View ์ปดํฌ๋ํธ
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ๊ณ์ธต์ด ์๋ ์ญํ ๊ธฐ์ค(feature-based) ์ผ๋ก ๊ตฌํ
<Suspense fallback={<Loading />}>
<UserProfileContainer />
</Suspense>
โ
ํ๋ ์ค๊ณ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
๋ ์ด์ด |
์ญํ |
useUserXXX |
๋ฐ์ดํฐ ํจ์น, ์บ์ฑ ๋ก์ง |
XXXContainer |
ํ
ํธ์ถ, Suspense ๋์ |
XXXView |
์์ UI ์ปดํฌ๋ํธ (props ๊ธฐ๋ฐ) |
๐ฆ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์์ (Feature-first)
features/
โโโ user/
โโโ hooks/useUserProfile.ts
โโโ apis/fetchUserProfile.ts
โโโ components/
โโโ UserProfileContainer.tsx
โโโ UserProfileView.tsx