230524(์)
๐ ์ฑ์ฅ์ผ์ง 4.0
์ฑ
ํ๋ณตํ ์ด๊ธฐ์ฃผ์์(์จ์ธ ๋ค์ด์ด)
์ ๋ด์ฉ์ ์๊ทน๋ฐ์ ์์ํ๋ ์๋ฐํ ์ฑ์ฅ๊ธฐ๋ก
์ด์์๋ ๊ฝ๊ณผ ์ฃฝ์ ๊ฝ์ ์ด๋ป๊ฒ ๊ตฌ๋ณํ๋๊ฐ?
์ฑ์ฅํ๊ณ ์๋ ๊ฒ์ด ์ด์ ์๋ ๊ฒ์ด๋ค.
์๋ช ์ ์ ์ผํ ์ฆ๊ฑฐ๋ ์ฑ์ฅ์ด๋ค!
๐ณ (1.0)ํค์๋
์ต๋ํ ๊ฐ๋จํ๊ฒ ์ ๋ฆฌ, ์ถํ์ ๋ณด๋ฉด์ ์ค์ค๋ก ์ค๋ช
๐ (2.0)๊ฒฝํ ์์ฃผ๋ก
๋จ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ๋ณด๋ค ๋ฌด์์ ๋ฐฐ์ ๊ณ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์งง๊ณ ๊ฐ๋จํ๊ฒ ์์ฑ
โ๏ธ (3.0)์ ํด์ง ํ ํ๋ฆฟ์ ๋ง์ถฐ์
ํค์๋, ๊ฒฝํ ๋ชจ๋ ์ข๋ค. ๋ค๋ง ๋งค์ผ ์์ฑํ๊ธฐ๋ก ๋ง์ ๋จน์๋งํผ ํต์ฌ๋ง ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฆฌํ ์ ์๊ฒ ํ ํ๋ฆฟ์ ์์ฑ
(3.1)230102๋ถํฐ ์์๋๋ ํ์ต์ ๊ดํ ๋ด์ฉ ์ถ๊ฐ
(3.2)230313๋ถํฐ ์ข๋ ๊ฒฝํ, ๊ฐ์ ์์ฃผ์ ๋ด์ฉ๋ ๋ด๊ธฐ!
๐พ (4.0)ํ์ต ํค์๋์์ ์ต๋ํ ๊ฐ๋จํ ์ ๋ณด ์ ๊ณต, ๊ณ ๋ฏผ์์ ๋ด ๊ฒฝํ์ ์์ธํ ์ ์!
๐ ์ค๋์ ํ์ต ํค์๋
๋ฆฌ์กํธ ์ปดํฌ๋ํธ ๊ตฌ์กฐ
ํ์
์คํฌ๋ฆฝํธ์ ํจ๊ป ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ(?) ํน์ ์ปจ๋ฒค์
(?)์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. ex) React.FC
interface TempProps {
name: string;
age: number;
address: string;
}
const Temp = (props: TempProps) => {
const { name, age, address } = props;
return (
<>
<p>{name}</p>
<p>{age}</p>
<p>{address}</p>
</>
);
};
์ด๋ ๊ฒ ํํํ๋ฉด ์ปดํฌ๋ํธ๋ฅผ ๋ฑ ๋ดค์ ๋, ์ข๋ ์ง๊ด์ ์ผ๋ก ์ด๋ค props๋ฅผ ๋ฐ์์ ์ด๋ค ์ญํ ์ ํ๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ข์ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด props์์ ๋ด๊ฐ ํ์ํ ๊ฐ๋ค๋ง ๊ฐ์ ธ์์ return ํ๋ jsx ๋ถ๋ถ์ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌํ๋ค.
๋ฆฌ์กํธ ๋ผ์ฐํฐ
๋ฆฌ์กํธ ๋ผ์ฐํฐ๋ ๊ฒฐ๊ตญ์ Context API๋ก ๊ตฌ์ฑ๋์ด์๋ค. ์ฆ, Provider์ Consumer๋ก ๊ตฌ์ฑ๋์ด์๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ๋, ๋ผ์ฐํฐ๋ฅผ ๊ฐ์ธ๋ ๋ถ๋ถ์ Provider๋ฅผ ์ฌ์ฉํ๊ณ , ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ์์๋ Consumer๋ฅผ ์ฌ์ฉํด์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. (Context๋ก ๊ฐ์ธ๊ณ ์๋ ๋ถ๋ถ์ Provider๋ผ๊ณ ํ๊ณ , Context๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ถ์ Consumer๋ผ๊ณ ํ๋ค.)
์ค๋ ๊ตฌํํ ๋ผ์ฐํฐ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
const router = createBrowserRouter([
{
path: '/',
element: <RootPage />,
errorElement: <ErrorPage />,
children: [
{
path: '/',
element: <MainPage />,
errorElement: <ErrorPage />,
},
{
path: '/issues/:issueId',
element: <IssueDetailPage />,
errorElement: <ErrorPage />,
},
],
},
]);
function App() {
return (
<div className="App">
<RouterProvider router={router} />
</div>
);
}
export default App;
๋จผ์ App ์ปดํฌ๋ํธ์ ๋ค์ด๊ฐ Root ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ๊ทธ ์์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ค์ ๋ง๋ค์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ๋ค์ ๋ผ์ฐํฐ์ ๋ฑ๋กํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ App ์ปดํฌ๋ํธ์์๋ ๋ผ์ฐํฐ๋ฅผ ๊ฐ์ธ์ฃผ๋ Provider๋ฅผ ์ฌ์ฉํด์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ปดํฌ๋ํธ์์๋ Consumer๋ฅผ ์ฌ์ฉํด์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค. Counsumer๊ฐ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ๋ค์ํ๋ค. ์๋ฅผ ๋ค๋ฉด, useNavigate, useLocation, useMatch ๋ฑ๋ฑ์ด ์๋ค. ์ด๋ฐ ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํด์ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
๐ ์์ฝ ๋ฐ ํ๋ฃจ ๊ฐ๋จ ํ๊ณ
์ค๋ ์ ๋ง ์ง์คํด์ ๊ฐ๋ฐํ๋ค. ๋ด๊ฐ ๋งก์ ์์ธ ํ์ด์ง๋ฅผ ๋ชฉํ๋ก ํ๊ณ ๋ ๋์๊ฐ ๋ผ์ฐํฐ๊น์ง ๊ตฌํ ์๋ฃํ์ฌ ์ ๋ง ๋ฟ๋ฏํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์ด๋ค ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ ๋ฐฉ์์ด ์๋ ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ๋ ๊ธฐ๋ถ์ด ์ข์๋ค. ๋ฌด์๋ณด๋ค ๊ณต์๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๊ฐ๋ฐํ๋ ๊ฒ์ ์ฌ๋ฏธ๊ฐ ๋ถ์ ๊ฒ ๊ฐ์์ ๋๋๋ ์ข๋ค!! ์์ผ๋ก๋ ๊ณต์๋ฌธ์๋ฅผ ํ ๋๋ก ํ์ตํ๊ณ ๊ฐ๋ฐํ ์ ์๋ ๊ฐ๋ฐ์๊ฐ ๋์.
์ค๋์ ์ํ ์
- ์ค๋ ์ด์ฌํ ๋ชฉํํ๋งํผ ๊ตฌํํด๋ธ ์
์ค๋์ ์์ฌ์ด ์
- ์ง ์์ ๋๋ฌด ๊ตฌํ์๋ง ๋ชฐ์ ํ๋..? ๊ฐ์ธ ๊ณต๋ถ๋ ์กฐ๊ธ์ฉ ํ๋ฉด์ ํ๋ก์ ํธ ์งํํ์!