2021๋ ์ React๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค. (๋ด ์ฒซ ํ๋ก ํธ์๋ ํ๋ก์ ํธ)
๊ทธ๋ ์ดํ๋ก ํ์ฌ์ ์ ์ฌํ๋ฉด์ Next.js๋ก๋ง ๊ฐ๋ฐํ๋ค ๋ณด๋ react-router-dom๋ฅผ ์ฌ์ฉํ ์ผ์ด ์์๋ค.
Next.js๋ pages ํด๋๋ฅผ ์ด์ฉํด ์๋์ผ๋ก ๋ผ์ฐํธ๋ฅผ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฆฌ์กํธ ๋ฉํ ๋ง์ ์งํํ๋ฉด์ 2๋ ๋ง์ ๊ธฐ์ต ์ ํธ์ react-router-dom์ ๋ค์ ์ฌ์ฉํด ๋ณด๊ฒ ๋์๋ค.
2๋ ์ ์ ์ฌ์ฉํ๋ ๋ฒ์ ์ 5.2.0์ด๊ณ ์ด๋ฒ์ ์ฌ์ฉํ๊ฒ ๋ ๋ฒ์ ์ 6.10.0์ด๋ค.
v6๋ก ์ ๋ฐ์ดํธ๋๋ฉด์ ์ธํฐํ์ด์ค๊ฐ ์์ ํ ๋ฐ๋์๋ค.
react-router-dom BroswerRouter๋ก ๋ผ์ฐํฐ ๊ตฌํํ๊ธฐ
v5์์ ๋ผ์ฐํ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
๊ธฐ์กด v5์์๋ <Switch />๋ผ๋ ์ปดํฌ๋ํธ๊ฐ ์กด์ฌํ๋ค.
<BrowserRouter>
<Switch>
<Route path="/" component={HomePage} />
<Route exact path="/posts/:id" component={PostPage} />
</Switch>
</BrowserRouter>
path prop์ `/posts/:id` ์ฒ๋ผ `:<path parameter>` ๋ก ๋ค์ด๋๋ฏน ๋ผ์ฐํ ์ ๊ตฌํํ ์ ์๋ค.
์ด ๊ฐ์ Route์ ์ปดํฌ๋ํธ์์(PostPage) props๋ก ์ ๊ทผํ ์ ์๋ค.
export default function PostPage({ match, location, history }) {
const id = match.params.id;
const routeToSomewhere = () => {
history.push(somewhere);
};
...
}
v6์์ ๋ผ์ฐํ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์ ๋ค์๊ณผ ๊ฐ๋ค
- <Switch /> ์ปดํฌ๋ํธ๊ฐ <Route />๋ก ๊ต์ฒด๋จ
- component prop ๋์ element prop์ ์ฌ์ฉ.
- route ๋์์ธ ์ปดํฌ๋ํธ์ ์ด๋ค prop๋ ์ ๋ฌํ์ง ์์.
<BrowserRouter>
<Routes>
<Route path='/' element={<HomePage />} />
<Route exact path='/posts/:id' element={<PostPage />} />
</Routes>
</BrowserRouter>
๋์ด์ prop์ผ๋ก match, history, location์ด ์ ๋ฌ๋์ง ์๋๋ค.
๋์ useParams์ useNavigate์ ๊ฐ์ Hook์ผ๋ก ๋ผ์ฐํ ์ ๊ตฌํํ๋ค.
export default function PostPage() {
const { id } = useParams()
const navigate = useNavigate()
const routeToSomewhere = () => {
navigate(somewhere)
}
}
๋ง๋ฌด๋ฆฌ
๋ฆฌ์กํธ๋ 16.8 ๋ฒ์ ๋๋ถํฐ ํจ์ํ ์ปดํฌ๋ํธ๋ฅผ ์ง์ํ๊ณ Hook ๊ฐ๋ ์ ๋์ ํ์๋ค.
๋ฆฌ์กํธ๊ฐ ํด๋์คํ ์ปดํฌ๋ํธ์์ ํจ์ํ ์ปดํฌ๋ํธ๋ก ๋์ด๊ฐ์ ๋ฐ๋ผ react-router-dom๋ v6๋ถํฐ ๊ต์ฅํ ๋ง์ Hook์ ์ ๊ณตํ๊ณ ์๋ค.
์์ ์๋ path parmeter๋ฅผ match prop์ผ๋ก ๋๊ฒจ์คฌ๊ธฐ ๋๋ฌธ์ prop drilling์ด ๋น๋ฒํ๊ฒ ์ผ์ด๋ฌ๋ค.
์ด๋ฅผ useParams Hook์ผ๋ก ๊ต์ฒดํ๋ฉด์ ์๋ฌด๋ฆฌ ๊น์ ๋ ์ด์ด์ ์๋ ์์ ์ปดํฌ๋ํธ๋ผ๋ prop drilling ์์ด ๊ฐ๋จํ๊ฒ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์๋ค.
์ถ๊ฐ๋ก ๊ณต๋ถํด๋ณด๊ณ ์ถ์ ๊ฒ
v6์์ <Route />์ ๋ช ๊ฐ์ง props๊ฐ ์ถ๊ฐ๋์๋๋ฐ, loader๊ฐ ๊ฐ์ฅ ๋์ ๋์๋ค.
loader๋ navigate ์ ๋ฐ์ดํฐ ํจ์นญ์ ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ ๊ฐ๋ค.
๋ณดํต path parameter๋ ํน์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์์ฒญํ ๋ ์ด์ฉ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ Route์์ ๋ฐ๋ก ๊ตฌํํ ์ ์๋ค๋ฉด ๊ต์ฅํ ํธ๋ฆฌํ ๊ฒ ๊ฐ๋ค.
'๐ชด TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Typescript] ์ ๋ ฅ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๋ ์ ํธ๋ฆฌํฐ - ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ด ๊ฐ๋จํ๊ฒ ๊ตฌํํ๊ธฐ (0) | 2023.06.29 |
---|---|
Next.js 13์ App Directory์ 4๊ฐ์ง ์ถ๊ฐ๋ ๊ธฐ๋ฅ (0) | 2023.05.27 |