- path์์ฑ์ผ๋ก ์์ ์ด ์ํ๋ URL ์ฃผ์๋ฅผ ๋ง๋ค๊ณ ๊ทธ ํด๋น URL์ ๋ค์ด๊ฐ ์ปดํฌ๋ํธ๋ค์ ์ง์ ํ๊ณ ๋ธ๋ผ์ฐ์ ์ด๋ ์์ด ๋น ๋ฅด๊ฒ ํ์ด์ง ์ ํ์ด ์ด๋ฃจ์ด์ง๋๋ก ๋์์ ์ค๋ค.
- CRA(Create React App)์๋ routing์ ์ํ ๋ก์ง์ด ๋ค์ด์์ง ์๊ธฐ ๋๋ฌธ์, ๊ฐ์ฅ ์ธ๊ธฐ ์๋ routing soulution์ธ
react-router
๋ฅผ ์ถ๊ฐํ์ฌ routing์ ๊ตฌํํ๋๋ก ํ์๋ค.
Routing์ ์ค์ต์ผ๋ก ๊ตฌํํ๊ธฐ ์ ์ ๋จผ์ ์์๋์ด์ผ ํ ๊ฒ๋ค์ด ์๋ค.
1. SPA(Single Page Applicatoin) : ํ์ด์ง๊ฐ ํ๋๊ฐ ํ ๊ฐ์ธ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ ์๋ฏธ์ด๋ค.
โ Questionโ
Q1. ๋ฆฌ์กํธ ํ๋ก์ ํธ์ .html ํ์ผ์ ๊ฐ์๋ ?
A . 1๊ฐ(SPA์ด๊ธฐ ๋๋ฌธ์)
Q2. ํ ๊ฐ์ ์นํ์ด์ง(html)์์ ์ฌ๋ฌ ๊ฐ์ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๋ ๋ฐฉ๋ฒ์?
A. Routing
2. Routing : ๋ค๋ฅธ ๊ฒฝ๋ก(url์ฃผ์)์ ๋ฐ๋ผ ๋ค๋ฅธ View(ํ๋ฉด)๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ.(๋ฆฌ์กํธ ์์ฒด์๋ ๊ธฐ๋ฅ์ด ์์ - ๋ฆฌ์กํธ๊ฐ Library๋ก ๋ถ๋ฅ๋๋ ์ด์ )
์ ์ฌ์ง์ ๋ด๊ฐ ๊ตฌํํ๋ ์ธ์คํ๊ทธ๋จ ํด๋ก ์ฝ๋ฉ์ ๊ฒฐ๊ณผ๋ฌผ์ Routes Component๋ก ๊ตฌ์ฑํด๋ ๋ด์ฉ์ด๋ค. ๋ด๊ฐ ๊ตฌํํ ์ปดํฌ๋ํธ๋ฅผ ๋ค์ ๋ณต๊ธฐํด๋ด์ผ๊ฒ ๋ค.
(1) ๋จผ์ , ๋ผ์ฐํ ์ ์ํด ๋ช ๋ น์ด๋ค(1,2๋ฒ)
์ ์ ๋ ฅํ๊ณ , ๋ด๊ฐ ๋ง๋ ๋ก๊ทธ์ธ, ๋ฉ์ธ ํ์ด์ง(4,5๋ฒ)
๋ฅผ ์ฐ๊ฒฐ์์ผฐ๋ค.
(2) ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ํจ์ํ
๊ณผclassํ
2๊ฐ์ง๋ก ๋๋๋๋ฐclassํ
์ ์ด์ฉํ์๋ค.(8๋ฒ ์ค)
(3) Route๋ก ์์ฑ๋ ์ปดํฌ๋ํธ ์ค ๋งค์นญ๋๋ ์ฒซ Route๋ฅผ ๊ตฌํํด์ฃผ๊ณ , ๋ก๊ทธ์ธ์ ์ฒซํ์ด์ง, ๋ฉ์ธ์ ๋ฉ์ธํ์ด์ง๋ก ์ฐ๊ฒฐํ์๋ค.(13,14๋ฒ์งธ ์ค)
(4) ๋ง๋ฌด๋ฆฌ๋ก Routes ์ปดํฌ๋ํธ๋ฅผ export ํ์๋ค.
โญ๏ธ ์ฌ๊ธฐ์๋ ๋ฃจํธ์ path์ ๋ํด ์ ํํ ์ดํดํ์ง ๋ชปํด์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์๋ค.
exact path = "/"์ด๊ฒ์ ์ด๊ธฐํ๋ฉด์ผ๋ก ๋ณดํต ํ์ด์ง์ ์ฒซ ํ๋ฉด์ ์ฐ๊ฒฐํ๋ฉด ๋๋ค๊ณ ํ๋ค.(๋๋ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์ง์ ํ๋ค๊ณ ์๊ฐํ์ฌ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. โญ๏ธ
๋ผ์ฐํ ์ ํ๊ธฐ ์ํด index.js๋ ์์ ์ ํ๋ค.
(1)import Routes from "./Routes";
๋กRoutes.js
์์ ์ง์ ํ Routes ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์๋ค.
(2)reset.scss
์common.scss
๋ ๋ก๊ทธ์ธ ํ์ด์ง์ ๋ฉ์ธ ํ์ด์ง๊ฐ ๋ชจ๋ ์ง์ ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ ธ์๋ค.
(3) ReactDOM.render(<Routes(์ปดํฌ๋ํธ๋ช ) />(์ธ์1) , document.getElementById("root"))(์ธ์2)๋ก ๋ง๋ฌด๋ฆฌ๋ฅผ ํ๋ค.
โญ๏ธ 3๋ฒ์งธ ์ค๊ณผ 4๋ฒ์งธ ์ค์ ๋ผ์ฐํ ์ ํ๊ธฐ ์ ์ ์ฌ์ฉํ๋ ๋ด์ฉ๋ค์ ์ค์ตํ๋ ๊ฒ์ด๋ค. โญ๏ธ
Routes.js์์ ์ค์ ํ path๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ
(1) Link ์ปดํฌ๋ํธ
- html์<a>
ํ๊ทธ์ ๊ฐ์ด<Link>
ํ๊ทธ๋ ์ง์ ํ ๊ฒฝ๋ก๋ก ๋ฐ๋ก ์ด๋์์ผ์ค๋ค.
- import {Link} from "react-router-dom"; โก๏ธ react-router-dom์์ ์ ๊ณตํ๋<Link>
์ปดํฌ๋ํธ๋ DOM์์<a>
๋ก ๋ณํ๋๋ค.
- ๋๋ ๋ฒํผ์๊ฒ ๋ฉ์ธ์ผ๋ก ๊ฐ๋ ๋งํฌ๋ฅผ ์ฃผ๊ณ ์ถ์ด<Link to ="main">
์ ๋ฒํผํ๊ทธ์ ๊ฐ์ธ์ฃผ์๋ค. ์์ฃผ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด์๋ค. ๊ธฐ์ตํ์<Link to = "๋ณด๋ด๊ณ ์ถ์๊ณณ">
- ํ์ฉ๋ฒ : ํด๋ฆญ์ ๋ฐ๋ก ์ด๋ํ๋ ๋ก์ง ๊ตฌํ์ (Nav Bar, Aside Menu, ์์ดํ ๋ฆฌ์คํธ)
(2) this.props.history.push()๋ก ๊ตฌํํ๊ธฐ
- ์์ง์ ์์ธํ ๋ชจ๋ฅด๋ ๋ฐฉ๋ฒ์ด๋ค. ํ์ง๋ง ๋ฐฐ์ด๋งํผ๋ง ์ ์ด๋ณด๊ฒ ๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ํจ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
- goToMain์ด๋ผ๋ ํจ์๋ฅผ ์ด์ฉํด์ ๋ฉ์ธํ์ด์ง๋ก ์ด๋์์ผฐ๋ค. โก๏ธgoToMain = () => {this.props.history.push("/main")}
- ์ดํ์ ๋ฒํผ์ ์จํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ง์ ํ๋ค.(<button onClick={this.goToMain}>๋ก๊ทธ์ธ</button>
)- ํ์ฉ๋ฒ : ํ์ด์ง ์ ํ ์ ์ถ๊ฐ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ ๋ก์ง์ด ์๋๊ฒฝ์ฐ์ ๊ตฌํํ๋ค.
(์) ํ์๊ฐ์ ์ด ๋์ด ์๋ ์ฌ์ฉ์ โก๏ธ ๋ฉ์ธํ์ด์ง ์ด๋
ย ย ย ย ย ย ย ํ์๊ฐ์ ์ด ๋์ด ์์ง ์์ ์ฌ์ฉ์ โก๏ธ ํ์๊ฐ์ ํ์ด์ง๋ก ์ด๋
์ ํ๋์ด์ผ ํ๋ ์ผ
(1) ssas ์ค์น : npm install node-sass@4.14.1 --save(๋ช ๋ น์ด)
๋ฒ์ ์ ๋ฐ๋ผ ํธํ ์ด์๊ฐ ์์ ์ ์์ด ๋๋ 4.14.1๋ฒ์ ์ ๋ค์ด๋ก๋ ๋ฐ์๋ค.
์ค์น ํ node-modulesํด๋์ node-sass๊ฐ ์๊ฒผ๋์ง ํ์ธํ ๊ฒ.
(2) .css ํ์ผ .scss๋ก ๋ณ๊ฒฝํ๊ธฐ
Sass์ ํ์ผ ํ์ฅ์๋ .scss์ด๊ธฐ ๋๋ฌธ์ ์์ ์ด ํ์ํ๋ค.
Sass ๊ธฐ๋ฅ
(1) Nesting ๊ธฐ๋ฅ : nav์ ์์์์๋ฅผ ๋ชจ๋ ๋ฐ๋ก ๋ถ๋ฆฌํด๋ ๊ฒ(์ผ์ชฝ)๊ณผ ๋ฌ๋ฆฌ Nesting๊ธฐ๋ฅ์ ์ด์ฉํด์ nav์ ์์์์๋ค์ ๋ชจ๋ ํ๊ณณ์ ๋ชจ์์ฃผ์๋ค.
(2) ๋ณ์ํ์ฉ, &์ฐ์ฐ์, mixin ๋ฑ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ์ ์ฉํ๊ธฐ : ์ด ๋ถ๋ถ์ ์์ง ํ์ฉํ์ง ๋ชปํด๋ดค๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ด ์๋ค๋ ์ ๋๋ฅผ ์ผ๋จ ์์๋์.
๊ฐ๋จํ๊ณ
๋ผ์ฐํ ์ ๋ญ๊ฐ ์ด๋ ค์ด๋ฏ ํฅ๋ฏธ๋ก์ด ์ธ์ ์ด์๋ค. ์ง์ ์ ์ฉํด๋ณด๋ฉด์ ์ธ์ ์ ๋ค์ผ๋ฉด์ ์์๋ฃ์ง ๋ชปํ๋ ๋ด ๋จธ๋ฆฌ์์ด ์กฐ๊ธ์ฉ ์ ๋ฆฌ๊ฐ ๋์๋ค. ์ผ๋จ์ ๋ฏ์ ๋ฆฌ์กํธ๋ผ๋ ํ๊ฒฝ์ ์ต์ํด์ง๊ธฐ ์ํด์ ๋ง์ด ๋ณด๊ณ ๋ง์ด ์จ๋ณด๋๋ก ํด์ผ๊ฒ ๋ค.
์ค๋์ ์ฌ๊ธฐ๊น์ง!