React Router
ํ์ต ํค์๋
Router
React Router
BrowserRouter
history API
Routes
Route
MemoryRouter
๋์ ๋ผ์ฐํ
URL Parameter
useParams
Query String
useSearchParams
์ปดํจํฐ ๋คํธ์ํฌ ๊ฐ์ ๋ฐ์ดํฐ ํจํท์ ์ ์กํ๋ ๋คํธ์ํฌ ์ฅ์น๋ค.
์ฆ, ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ ๊ฐ์ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์๋ด๋ ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด ์ค๊ณ ์ญํ ์ ํด์ฃผ๋ ์ฅ์น๋ค.
React Router
React์์ ์ฃผ์(URL)์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ ๋ ๋๋ง์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Context API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐ค ์ React Router ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ผ์ฐํ ์ด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ URL์ ๋ฐ๋ผ ์๋ง๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ ํ๋ก์ ํธ๋ฅผ ํ๋์ ํ์ด์ง๋ก ๊ตฌ์ฑํ ์๋ ์๊ณ , ์ฌ๋ฌ ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ ๋ค๋ฉด, ํ, ํฌ์คํธ ๋ชฉ๋ก, ํฌ์คํธ, ๊ธ์ฐ๊ธฐ ๋ฑ์ ๋ค์ํ ํ์ด์ง๋ค์ด ์๋ค. ๋ํ ์ด ํ์ด์ง๋ค์ ๋ฐ๋ผ ์ฃผ์(URL)๋ ๋ง๋ค์ด์ค์ผ ํ๋ค. ์ฃผ์๊ฐ ์์ด์ผ, ์ ์ ๋ค์ด ๋ถ๋งํฌ๋ ํ ์ ์๊ณ ์๋น์ค์ ๊ตฌ๊ธ์ ํตํด ์ ์ ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ ๊ฒ ์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ด์ง๋ณ๋ก ์ปดํฌ๋ํธ๋ค์ ๋ถ๋ฆฌํด๊ฐ๋ฉด์ ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๊ฒ์ด ๋ฐ๋ก ๋ผ์ฐํ ์์คํ (React Router)์ด๋ค.
๐ค React Router ์ ์ญํ
์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ์ฃผ์์ฐฝ์ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์๋ง๋ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋ค. ์ดํ ๋งํฌ๋ฅผ ๋๋ฌ์ ๋ค๋ฅธ ํ์ด์ง๋ก ์ด๋ํ๊ฒ ๋ ๋ ์๋ฒ์ ๋ค๋ฅธ ํ์ด์ง์ html์ ์๋ก ์์ฒญํ๋ ๊ฒ์ด ์๋๋ผ, ๋ธ๋ผ์ฐ์ ์ History API๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ ์ฃผ์์ฐฝ์ ๊ฐ๋ง ๋ณ๊ฒฝํ๊ณ ๊ธฐ์กด์ ํ์ด์ง์ ๋์ ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ๋ผ์ฐํ ์ค์ ์ ๋ฐ๋ผ ๋ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฒ ๋๋ค.
React Router ์ฌ์ฉ๋ฒ
โ๏ธ React Router ์ค์น
HTML5์ History API๋ฅผ ์ฌ์ฉํ์ฌ ํ์ด์ง๋ฅผ ์๋ก ๋ถ๋ฌ์ค์ง ์๊ณ ๋ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ๊ณ ํ์ฌ ์ฃผ์์ ๊ฒฝ๋ก์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ ์ ์๋๋ก ํด ์ฃผ๋ ์ญํ์ ์ํํ๋ค.
๋ผ์ฐํ ์ ์งํํ ์ปดํฌ๋ํธ ์์์
BrowserRouter
์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๊ณ ๊ฐ์ธ์ฃผ์ด์ผ ํ๋ค.
๐ History API
history ์ ์ญ ๊ฐ์ฒด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ธ์ ํ์คํ ๋ฆฌ์ ๋ํ ์ ๊ทผ์ ์ ๊ณตํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ์์ ํ์ด์ง ๋ก๋ฉ์ ํ๋ฉด, ์ธ์
ํ์คํ ๋ฆฌ๋ฅผ ๊ฐ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด ํ์คํ ๋ฆฌ๋ฅผ stack์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ธ์
ํ์คํ ๋ฆฌ๋ ํ์ด์ง๋ฅผ ์ด๋ํ ๋ ๋ง๋ค ์์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค๋ก๊ฐ๊ธฐ
๋๋ ์์ผ๋ก ๊ฐ๊ธฐ
๊ฐ์ ์ด๋์ด ๊ฐ๋ฅํ๋ค.
โ "์ด๋ค ํ์ด์ง๋ฅผ ํ์ํ๋์ง์ ๋ํด์ history๋ฅผ ์๋ ๊ฒ" ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๐ค ์ History API๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋๊ฐ?
React๋ SPA์ ๊ธฐ๋ฐ์ด๋ค. ํ์ด์ง๊ฐ ๋ก๋ฉ์ด ๋์ด ๋ณ๊ฒฝ๋๋๊ฒ ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ปดํฌ๋ํธ๋ฅผ ํตํด ํ๋ฉด์ ์ ๋ฐ์ดํธ(๋ฆฌ๋ ๋๋ง)ํด์ค๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค์ ๋ก๋ ํ๋ฉด ์ด๋์ด ์ผ์ด๋์ง ์๋๋ค. ๊ทธ๋ ๊ธฐ์ History API๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํ๋ฉด ์ด๋ ์์ด URL์ ์ ๋ฐ์ดํธ ํด์ค ์ ์๋ค.
Routes & Route
Routes์ Route๋ React Router v6๋ถํฐ ๋์ ๋ ๊ฐ๋ ์ด๋ค.
๋ชจ๋
Route์ ์์ ๊ฒฝ๋ก
์ ์กด์ฌํด์ผ ํ๋ฉฐ, location ๋ณ๊ฒฝ ์ ํ์์ ์๋ ๋ชจ๋ Route๋ฅผ ์กฐํํด ํ์ฌ location๊ณผ ๋ง๋ Route๋ฅผ ์ฐพ์์ค๋ค.
ํ์ฌ ๋ธ๋ผ์ฐ์ ์ location(window.location.path ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค)์ํ์ ๋ฐ๋ผ ๋ค๋ฅธ element๋ฅผ ๋ ๋๋งํ๋ค.
๋ธ๋ผ์ฐ์ ํ๊ฒฝ์ด ์๋ ๊ณณ์์ ReactRouter๊ฐ ํฌํจ๋ ์ปดํฌ๋ํธ๋ฅผ ํ ์คํธ ํ ๋ ์ฌ์ฉํ๋ค.
MemoryRouter
๋ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์, ์ฃผ์๋ฅผ ๋ฐ๋ก ์ก์์ฃผ์ด์ผ ํ๋ค.
๐ฉ๐ปโ๐ป React Router ๊ฐ๋จํ ์์
๋์ ๋ผ์ฐํ
๋์ Routing์ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋์ง ์๊ณ ๋์ ์ผ๋ก ์ค์ ํ๋ ๋ฐฉ์์ด๋ค.
๋ผ์ฐํธ์ ๊ฒฝ๋ก์ ํน์ ๊ฐ์ ๋ฃ์ด ํด๋น ํ์ด์ง๋ก ์ด๋ ํ ์ ์๊ฒ ํ๋ ๊ฒ
๐ค ๋์ ๋ผ์ฐํ
์ด ํ์ํ ์ด์ ๋?
React Router ๋ฅผ ์ฌ์ฉํด์ ๋ฏธ๋ฆฌ ํ๋ก์ ํธ์ ์ฌ์ฉํ ๊ฒฝ๋ก๋ค๊ณผ ๋ณด์ฌ์ค ์ปดํฌ๋ํธ๋ฅผ ์ ์ํด๋๋ค. ํ์ง๋ง ๋ณต์กํ๊ณ ๊ท๋ชจ๊ฐ ํฐ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๊ฒฝ๋ก๋ฅผ ๋ฏธ๋ฆฌ ์ค์ ํ๋ ๋ฐฉ์๋ง์ผ๋ก๋ ์ฒ๋ฆฌํ๊ธฐ ํ๋ ์์ ์ด ์กด์ฌํ๋ค.
์๋ฅผ ๋ค์ด ์ผํ๋ชฐ์๋ ๋ค์ํ ์ํ์ด ์กด์ฌํ๊ณ , ์ํ๋ฆฌ์คํธ๊ฐ ์๊ณ , ๋ํ ์ํ ์์ธํ์ด์ง๋ ์กด์ฌํ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ํ๋ฆฌ์คํธ์์ ์ ํํ ์ํ์ ์์ธ ํ์ด์ง์ ์ ๊ทผ ํ๊ธฐ ์ํด์๋ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
๐ก ํน์ ๊ท์น์ ๋ง๋ค๊ณ , ๊ทธ ๊ท์น๊ณผ ๋ถํฉํ๋ URL์ด ์์ ๊ฒฝ์ฐ์๋ง ํด๋น element๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐํ๋ค.
URL Parameter
/:๊ฐ
ํํ๋ก ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค.:
๊ธฐํธ ๋ค์ ๋ถ๋ ๋ฌธ์์ด์ด Path Parameter ์ด๋ค.Path Parameter ๋ URL์ ์๋ ๊ฐ์ ๋ง์น ๋งค๊ฐ๋ณ์(Parameter)์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
Path parameter๋ฅผ ์ด์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๊ฐ์ ํ์ด์ง๋ก ์ ์ํ๋๋ผ๋, ํฐ ํ์ ๋์ผํ๋ ๋ค๋ฅธ UI๋ฅผ ๋ณด์ฌ์ฃผ๋๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
โ๏ธ useParams
URL Params์ ๊ฐ์ ๊ฐ์ฒด ํํ๋ก ๋ฐํํ๋ค.
key
: Route ์์ ์ค์ ํ Path Parameter์ ์ด๋ฆvalue
: Route์์ ์ค์ ํ Path Parameter์ ์ค์ ๋ก ์ ๋ฌ๋ ๊ฐ
/post/:id๋ก path๋ฅผ ์ค์ ํ์ ๋, ์ ์ ๊ฐ /post/1๋ก ์ ์ํ ๊ฒฝ์ฐ useParams๊ฐ ๋ฐํํ๋ ๊ฐ์ฒด์ key๋ id์ด๊ณ , value๋ 1์ด๋ค.
QueryString
URL์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ํฌํจ์์ผ์ฃผ๋ฉด ๋๋ค. ํน๋ณํ ์ค์ ์ ํ ํ์๋ ์๋ค.
Link ์ปดํฌ๋ํธ ์์ :
<Link to="/list?sort=popular" />
navigate ํจ์ ์์ :
navigate("/list?sort=popular")
โ๏ธ useSearchParams
QueryString (์ : ?sort=popular&sort=latest) ์์ ์ํ๋ ๊ฐ๋ง ๊บผ๋ด์ฌ ์ ์๋๋ก ๋์์ฃผ๋ Hook
searchParams.get(key) : ์ฟผ๋ฆฌ ์คํธ๋ง์์ ํน์ key์ value ๊ฐ ๋ฐํ (ํ๋๋ง)
searchParams.getAll(key) : ์ฟผ๋ฆฌ ์คํธ๋ง์์ ํน์ key์ ๋ชจ๋ value ๊ฐ์ ๋ฐฐ์ด๋ก ๋ฐํ
searchParams.toString() : ๊ฐ์ฒด ํํ์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ๋ฌธ์์ด ํํ๋ก ๋ฐํ
๐ ์ฐธ๊ณ
Last updated