๋๋ฉ ํ์ด์ง๋ก๋ง ๊พธ๋ช๋ค๋ฉด ๋ค๋น๊ฒ์ด์ ์ ๋ ์ ๋ณด์ง ์์๋ ๋์์ง๋ง Blog ์นดํ ๊ณ ๋ฆฌ๋ฅผ ํ๋ ์ถ๊ฐํ ์์ ์ด์๊ธฐ ๋๋ฌธ์ Router์ ๋ฐ๋ฅธ ์ปดํฌ๋ํธ ๋ ๋๋ง์ ์ํด react router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ฃผ๊ธฐ๋ก ํ๋ค.
yarn add react-router-dom
yarn์ ์ด์ฉํด Web ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ react-router-dom์ ์ค์นํด์ค๋ค. react-router-dom์ ๋์ ๋ผ์ฐํ ์ ์ํด <Link>, <Route> ๋ฑ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ์ปดํฌ๋ํธ๋ค์ ํญ์ <Router> ์ปดํฌ๋ํธ๋ก ์ธ์ฌ ์์ด์ผ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ BrowserRouter๋ฅผ Router ์ปดํฌ๋ํธ๋ก ์ฌ์ฉํ๋ฏ๋ก, index.js์ ์๋์ฒ๋ผ ์ถ๊ฐํด์ฃผ์๋ค.
์ด์ <App> ์ปดํฌ๋ํธ ์๋์์๋ <Link>, <Route> ๋ฑ์ ์ปดํฌ๋ํธ๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
Link, useLocation
Headr์์ ํ์ฌ ๋ผ์ฐํฐ ์ฃผ์๊ฐ '/'์ ์์นํ ๊ฒฝ์ฐ ๋ณด์ฌ์ง๋ ๋ค๋น๊ฒ์ด์ ๋งํฌ ์์ดํ ๋ค๊ณผ '/blog'์ ์์นํ ๊ฒฝ์ฐ ๋ณด์ฌ์ง๋ ๋ค๋น๊ฒ์ด์ ๋งํฌ ์์ดํ ๋ค์ ๋ค๋ฅด๊ฒ ํด์ฃผ๊ธฐ ์ํด์ ์๋์ฒ๋ผ ๊พธ๋ช๋ค.
useLocation์ import ํด์ค ๋ค, useLocation().pathname์ ํด์ฃผ๋ฉด ํ์ฌ ๋ธ๋ผ์ฐ์ URL์ pathname์ ๊ฐ์ง๊ณ ์จ๋ค. window.location.pathname์ ์จ๋ดค๋ค๊ฐ, react-dom-router ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋๋ ์ ๋๋ก ๋์ํ์ง ์๋ ๋ฏํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ์ผ๋ค.
<Link> ์ปดํฌ๋ํธ๋ to prop์ ๋ฐ์ ํด๋น ์ปดํฌ๋ํธ์ ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ URL ์ฃผ์๋ฅผ to prop์ ์ ์ pathname์ ๋ถ์ฌ ๋ฐ๊ฟ์ค๋ค.
๊ทธ๋ฌ๋ฉด ๋ผ์ฐํฐ ์ฃผ์์ ๋ฐ๋ผ ๋ ๋๋ง๋ ๋ถ๋ถ๋ ๋ฌ๋ผ์ ธ์ผ ํ๋ค. ๋๋ App Bar์ Footer ๊ทธ๋ฆฌ๊ณ ๊ฐ์ด๋ฐ์ ์์นํ๋ ๋ฐ๋ ์ปดํฌ๋ํธ๋ ๊ณตํต์ผ๋ก ์ฐ๊ณ ์ถ์ด์ ์๋์ฒ๋ผ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์คฌ๋ค.
exact={true} prop์ ์ด์ฉํ ๋๋ path='/'๋ก ์ค์ ๋์์ ๋ '/blog' ๊ฐ์ด '/'๋ฅผ ํฌํจํ path๋ ๋ฌด์ํ๊ณ , '/'๊ฐ pathname์ผ ๊ฒฝ์ฐ์๋ง ์ ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
component={} ํํ๋ก prop์ ์ธ ๋๊ฐ ์๊ณ , component์ ๊ทธ ์ธ prop์ ์ ๋ฌํด์ผ ํ ์ผ์ด ์์ผ๋ฉด component = {() => {}} ํํ๋ก ์จ์ฃผ๋ฉด ๋๋ค. ๋ฌผ๋ก ์ค์ฒฉ์ผ๋ก Routing๋ ๊ฐ๋ฅํ๋ค.