React์ Suspense๋ React 18์์ ์ ์์ผ๋ก ์ง์๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ React์ ๋ด์ฅ ์ปดํฌ๋ํธ๋ก, ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ์งํ๋๋ ๋์, ์ฌ์ฉ์์๊ฒ ๋ก๋ฉ์ ๋ํ ์ํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
Suspense๋ Suspense์ ๊ฒฝ๊ณ๋ฅผ ์ค์ ํ๊ณ , ๊ฒฝ๊ณ ๋ด์์ ๋น๋๊ธฐ์ ์ผ๋ก ๋ก๋๋๋ ์ปดํฌ๋ํธ๋ ๋ฐ์ดํฐ์ ๋ํ ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ค. ์ด๋ฐ ๋ก๋ฉ ์ํ๋ fallbackํ๋กํผํฐ๋ฅผ ํตํด ์ฌ์ฉ์์๊ฒ ํ์๋๋ค. Suspense์ ์์ ์ปดํฌ๋ํธ(children)๊ฐ ์ค์ ๋น๋๊ธฐ ์ฒ๋ฆฌ ์ดํ์ ๋ ๋๋ง ๋๋ ์ปดํฌ๋ํธ์ด๋ค.
<Suspense fallback={<Loading />}>
<SomeComponent />
</Suspense>
์์ ๊ฐ์ด <Suspense>{children}</Suspense>๋ก ์ฌ์ฉ๋๋ฉฐ, React Suspense๋ ์ฃผ๋ก React ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ๋ก๋ฉ์ ์ํด ์ฌ์ฉ๋๋ React.lazy์ ํจ๊ป ์ฌ์ฉ๋๋ค.(React.lazy๋ ๋์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ์ปดํฌ๋ํธ๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ๋์ด, ์ปดํฌ๋ํธ๋ฅผ ํ์๋ก ํ๋ ์์ ์์๋ง ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ก๋ํ ์ ์๋ค.)
React.lazy๋ Suspense ์ปดํฌ๋ํธ์ ํจ๊ป ์ฌ์ฉํ์ฌ ๋์ฑ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, Suspense ์ปดํฌ๋ํธ๋ React.lazy๋ก ๋ก๋ํ๋ ๋์ ์ผ์์ ์ผ๋ก ๋ค๋ฅธ ๋ด์ฉ์ ๋ ๋๋งํ ์ ์๊ฒ๋๋ค.
<Suspense fallback={<Loading />}>
<Details artistId={artist.id} />
</Suspense>
function Details({ artistId }) {
return (
<>
<Biography artistId={artistId} />
<Panel>
<Albums artistId={artistId} />
</Panel>
</>
);
}
์์ ๊ฐ์ด ์ง์ ์ ์ธ ์์ ์ปดํฌ๋ํธ๊ฐ ์๋๋๋ผ๋ ์ ์์ ์ผ๋ก ๋์ํ๋ค. (์ด๋ ๊ฐ๋ฅ)
๐ธ ์ถ์ฒ ๐ธ