2024-04-11.md
๐กDIL: ๋ชจ๋ ๋ฆฌ์กํธ ๋ฅ ๋ค์ด๋ธ, 6์ฃผ์ฐจ-4
์คํฐ๋: ์๊ฐ CS, https://github.com/monthly-cs/2024-03-modern-react-deep-dive
์ค๋ ์งํ: ๊ฐ์ธ๊ณต๋ถ
DIL-week6-4_2024-04-11
| DIL ์ฃผ์ฐจ | ๋ฒ์ | ๋ด์ฉ | ์ค๋์ฐจ ์ง๋ | | -------- | ---------- | --------------------------------------------------------- | ----------- | | 6์ฃผ์ฐจ | 10์ฅ, 11์ฅ | ๋ฆฌ์กํธ 17๊ณผ 18 ๋ณ๊ฒฝ ์ฌํญ ์ดํด๋ณด๊ธฐ, Next.js 13๊ณผ ๋ฆฌ์กํธ 18 | 682~686p |
์ค๋ ์ฝ์ ๋ด์ฉ์ markdown์ผ๋ก ๊ฐ๋จํ ๋ฉ๋ชจ
ํ ์์ผ์ ๋ง์ด ์ฝ์ด์ผ ํ ๊ฒ์ผ๋ก ๋ณด์
๋ฆฌ์กํธ 18 ๋ฒ์ ์๋ก ์ถ๊ฐ๋ ํ
useTransition
- UI ๋ณ๊ฒฝ์ ๊ฐ๋ก๋ง์ง ์๊ณ ์ํ๋ฅผ ์
๋ฐ์ดํธ
- ๋๋๋ง ์ค๋จ์ด ์๋๊ธฐ ๋๋ฌธ์, ๋๋๋ง์ด ๋ฌด๊ฑฐ์ด ์์ ์ ๊ฐ๋ก๋งํ๋ ํ์ ์๊ธธ ์ ์์
- โจ ๋์์ฑ concurrency์ ๋ค๋ฃฐ ์ ์๋ ์๋ก์ด ํ
- ๋๋ฆฐ ๋๋๋ง ๊ณผ์ ์ผ ๋ ๋ก๋ฉ ํ๋ฉด
- ๋๋๋ง์ ๋ฒ๋ฆฌ๊ณ ์๋ก์ด ์ํ๊ฐ์ผ๋ก ๋ค์ ๋๋๋ง
- ์ฃผ์์
- ๋ด๋ถ์๋ setState๊ณผ ๊ฐ์ ์ํ ์ ๋ฐ์ดํธ ํจ์ ์์ ๋ง ๋๊ธธ ์ ์๋ค
- startTransition ์ํ ์ ๋ฐ์ดํธ๋ ๋ค๋ฅธ ๋ชจ๋ ๋๊ธฐ ์ํ ์ ๋ฐ์ดํธ๋ก ์คํ์ด ์ง์ฐ๋ ์ ์๋ค.
- ๋ฐ๋์ ๋๊ธฐ ํจ์! ์์ ์ ์ง์ฐ์ํค๋ startTransition ์์ ๊ณผ ๋น๋๊ธฐ ์คํ์ด ๋ถ์ผ์น์ด๊ธฐ ๋๋ฌธ
import { useState, useTransition } from "react";
type Tab = "about" | "posts" | "contact";
export default function TabContainer() {
const [isPending, startTransition] = useTransition(); // ์ธ์x
// isPending: ์ํ ์
๋ฐ์ดํธ๊ฐ ์งํ ์ค์ธ์ง ํ์ธ
// startTransition: ๊ธด๊ธํ์ง ์์ ์ํ ์
๋ฐ์ดํธ๋ก ๊ฐ์ฃผํ set ํจ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์
// ์ฌ๋ฌ ๊ฐ์ setter๋ฅผ ๋ฃ์ด์ค ์๋ ์๋ค.
const [tab, setTab] = useState<Tab>("about");
function selectTab(nextTab: Tab) {
startTransition(() => {
setTab(nextTab);
});
}
return (
<>
{isPending ? (
"๋ก๋ฉ ์ค"
) : (
<>
{tab === "about" && <About />}
{tab === "posts" && <Posts />}
{tab === "contact" && <Contact />}
</>
)}
</>
);
}