[250714] TIL
Today I Learned (2025-07-14)
Suspense
- ์ฌ๊ธฐ์๋ถํฐ๋ ๋์ ์ผ๋ก ์ฑ์์ง ์ ์๋ค๋ ๊ฒฝ๊ณ๋ฅผ ๋ง๋๋ ์ฉ๋
- suspense๋ ๋น๋๊ธฐ์ , ์ง์ฐ์ด ๋ถ๊ฐํผํ ๋ถ๋ถ์์๋ง ์ง์ค์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ
์๋ฒ suspense
- ์๋ฒ ๋ฐ์ดํฐ ํจ์นญ์ด ๋๋ ๋ ๊น์ง
- ๋ ๋ฆฝ์ ์ผ๋ก ๋น๋๊ธฐ ์์ญ ๋ง๋ค๊ณ ์ถ์ ๋
ํด๋ผ์ด์ธํธ suspense
- ๋น๋๊ธฐ ๋ฐ์ดํฐ ํจ์นญ, ์ฝ๋ ์คํ๋ฆฌํ ๋ฑ
- fetch๋ณด๋ค๋ ์ฃผ๋ก import๋ก ๋์ (lazy) ์ปดํฌ๋ํธ, swr , react query ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉ
๋ ๋ค โ์ค๋น ์ ๋ ๋ถ๋ถ์ ๊ฒฝ๊ณโ๋ฅผ ๋ง๋๋ ๊ฑด ๋๊ฐ์ง๋ง, ์คํ ํ๊ฒฝ/์ฉ๋/๋ ๋๋ง ์ฃผ์ฒด๊ฐ ๋ค๋ฆ!
use
https://ko.react.dev/reference/react/use#usage
- if ๋ฌธ, ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์์ ํธ์ถ ํ ์ ์๋ค.
use
Hook์ Promise๋ Context์์ ์ฐธ์กฐํ ๊ฐ์ ๋ฐํํฉ๋๋ค.- ์๋ฒ ์ปดํฌ๋ํธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ๋๋ use ๋ณด๋ค async await ๋ฅผ ์ฌ์ฉ
- async await ์ด ํธ์ถ๋ ์์ ๋ถํฐ ๋ ๋๋ง์ ์์ํ๋ ๋ฐ๋ฉด, use๋ ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์กธ๋ธ๋ ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋ง ํจ
- ์ด๊ฒ ๋ฌด์จ ์๋ฆฌ๋, await ๊ฐ ๋๋ ๋๊น์ง ๋ ๋๋ง ์์ฒด๊ฐ ๋ฉ์ถค
- use๋ ๋ฐ์ดํฐ ํจ์นญ ๋ ์ ์๋ ๋ฆฌ๋ ๋๋ง
- async await ์ด ํธ์ถ๋ ์์ ๋ถํฐ ๋ ๋๋ง์ ์์ํ๋ ๋ฐ๋ฉด, use๋ ๋ฐ์ดํฐ๊ฐ ๋ฆฌ์กธ๋ธ๋ ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋ง ํจ
- ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ promise ์์ฑํ๋ ๊ฒ๋ณด๋ค ์๋ฒ ์ปดํฌ๋ํธ์์ ์ ๋ฌํ๋๊ฒ ์ข์. ํด๋ผ์ด์ธํธ ์ปดํฌ๋ํธ์์ ์์ฑ๋ promise๋ ๋ ๋๋ง๋๋ง๋ค ๋ค์ ์์ฑ๋จ
- ์๋ฒ ์ปดํฌ๋ํธ์์ ๋ง๋ค์ด์ง ๋ฐ์ดํฐ๋ Props ๋ก ํด๋ผ์ด์ธํธ์ ํ ๋ฒ ์ ๋ฌ ๋๋ฉด ๊ทธ๊ฑธ ๋ฐ๋ ์ชฝ์์ ์๋ฌด๋ฆฌ ๋ฆฌ๋ ๋ํด๋ ๊ฐ์ด ๋ฐ๋์ง ์์
- ๋์ ํด๋ผ์ด์ธํธ์์ ์ํ๊ฐ ์ ๋ฌ ๋๋ฉด ์๋๊ฐ ์๋ฒ ์ปดํฌ๋ํธ์ฌ๋ ๋ฆฌ๋ ๋๋ง ๋จ
- useContext ๋์ ์ฌ์ฉ ๊ฐ๋ฅ
- ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ํ๊ธฐ
"use client";
import { use, Suspense } from "react";
function Message({ messagePromise }) {
const messageContent = use(messagePromise);
return <p>Here is the message: {messageContent}</p>;
}
export function MessageContainer({ messagePromise }) {
return (
<Suspense fallback={<p>โDownloading message...</p>}>
<Message messagePromise={messagePromise} />
</Suspense>
);
}
use
๋try
-catch
๋ธ๋ก์์ ํธ์ถํ ์ ์์ต๋๋ค.try
-catch
๋ธ๋ก ๋์ ์ปดํฌ๋ํธ๋ฅผ Error Boundary๋ก ๋ํํ๊ฑฐ๋, Promise์catch
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋์ฒด ๊ฐ์ ์ ๊ณตํด์ผ ํฉ๋๋ค.
"use client";
import { use, Suspense } from "react";
import { ErrorBoundary } from "react-error-boundary";
export function MessageContainer({ messagePromise }) {
return (
<ErrorBoundary fallback={<p>โ ๏ธSomething went wrong</p>}>
<Suspense fallback={<p>โDownloading message...</p>}>
<Message messagePromise={messagePromise} />
</Suspense>
</ErrorBoundary>
);
}
function Message({ messagePromise }) {
const content = use(messagePromise);
return <p>Here is the message: {content}</p>;
}
Leave a comment