react๋ view๋ง ๋ด๋นํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๊ทธ๋์ ๋ผ์ฐํ ์ ๋ด๋นํ๋ react-router๋ฅผ ๋ฐ๋ก ์ค์นํด์ฃผ์ด์ผ ํ๋ค ์๋ ์ฑ๊ธํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ (SPA)๋ ์ฃผ์๊ฐ ์์ด ์ ์ํ๊ธฐ ํ๋ค์์ง๋ง react-router๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ด์ง๋ฅผ ๊น๋นก์์ด ์์ผ๋ฉด์๋ ์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๊ฒ ๋๋ค. ์๋ฅผ๋ค์ด ํ์ด์ง๋ฅผ ๋๊ธธ๋ ํน์ ๋ ์ด์์์ ๊ณ ์ ๋์ด์๊ณ ๋ด์ฉ๋ง ๋ฐ๋๋ฉฐ ์ฃผ์๋ ๊ทธ์ ๋ฐ๋ผ ๋ฐ๋๋ค
npm install --save react-router
์์ ๊ฐ์ด terminal์ ์ ๋ ฅํด์ฃผ๋ฉด ์ค์นํ ์ ์๋ค.
srcํด๋์์ Routes.js , index.js ๋ฅผ ๋ง๋ค์ด์ค๋ค.
index.js์์ ์ค์ ์ ํด์ฃผ๊ณ , Routes.js์์ ๊ฐ ์ปดํฌ๋ํธ๋ฅผ import๋ฅผ ํ๊ณ Router์์์ ํ์ด์ง๋ฅผ ์ง์ ํด์ค๋ค
<Route>
์์ฒญ ๊ฒฝ๋ก์ ๋ ๋๋งํ ์ปดํฌ๋ํธ๋ฅผ ์ค์ ํ๋ค<Switch>
ํ์ ๋ผ์ฐํฐ ์ค ํ๋๋ฅผ ์ ํํ๋ค<Redirect>
์์ฒญ ๊ฒฝ๋ก๋ฅผ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ๋ฆฌ๋ค์ด๋ ์
ํ๋ค. ์์๋ก ์ค์ ํ์ง ์๋ ๊ฒฝ๋ก ์์ฒญ์ Home๊ฒฝ๋ก๋ก ์ด๋ํ๋ค๊ฐ๊ฐ์ Route์ ์ฐ๊ฒฐ๋ ์ปดํฌ๋ํธ์ props๋ก match, location, history ๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ค. ์๋๋ ์ฝ์๋ก props๋ฅผ ํ์ธํด ๋ณธ ๊ฒฐ๊ณผ์ด๋ค.
console.log(this.props)
history, location, match๊ฐ ๋ด๊ฒจ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
match ๊ฐ์ฒด์๋ ์ URL์ด ๋งค์นญ๋ ์ ๋ณด๊ฐ ๋ด๊ฒจ์ ธ์๋ค.
match.params๋ก patch์ ์ค์ ํ ํ๋ผ๋ฏธํฐ๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค.
path : [string] ๋ผ์ฐํฐ์ ์ ์๋ path
url : [string] ์ค์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ๋ url path
isExact : [boolean] true์ผ ๊ฒฝ์ฐ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์์ ํ ๋งค์นญ๋ ๊ฒฝ์ฐ์๋ง ์์ฒญ์ ์ํ
params : [JSON object] url path๋ก ์ ๋ฌ๋ ํ๋ผ๋ฏธํฐ ๊ฐ์ฒด
Location ๊ฐ์ฒด์๋ ํ์ฌ ํ์ด์ง์ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ํ์ ์ผ๋ก location.search๋ก ํ์ฌ url์ ์ฟผ๋ฆฌ ์คํธ๋ง์ผ๋ฅด ๊ฐ์ ธ์ฌ ์ ์๋ค.
pathname : [string] ํ์ฌ ํ์ด์ง์ ๊ฒฝ๋ก๋ช
search : [string] ํ์ฌ ํ์ด์ง์ query string
hash : [string] ํ์ฌ ํ์ด์ง์ hash
History ๊ฐ์ฒด๋ ๋ธ๋ผ์ฐ์ history์ ์ ์ฌํ๋ค. ์คํ(stack)์ ํ์ฌ๊น์ง ์ด๋ํ url ๊ฒฝ๋ก๋ค์ด ๋ด๊ฒจ์๋ ํํ๋ก ์ฃผ์๋ฅผ ์์๋ก ๋ณ๊ฒฝํ๊ฑฐ๋ ๋๋์๊ฐ ์ ์๋๋ก ํด์ค๋ค.
length : [number] ์ ์ฒด history ์คํ์ ๊ธธ์ด
action : [string] ์ต๊ทผ์ ์ํ๋ action
location : [JSON object] ์ต๊ทผ ๊ฒฝ๋ก ์ ๋ณด
push(path,[state]) : [fuction] ์๋ก์ด ๊ฒฝ๋ก๋ฅผ history ์คํ์ผ๋ก ํธ์ํ์ฌ ํ์ด์ง๋ฅผ ์ด๋
๋ณดํต ์ด๋ํ ๋งํฌ๋ฅผ push()์์ ๋ฃ์ด ์ด๋ค.
this.props.history.push(`์ด๋ํ ๋งํฌ`);
์๋๋ ํ ํฐ์ด๋๊ฒฐ์ ์ ๋ณด๋ฅผ ๋ค์ ํ์ด์ง ์ด๋ํ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง๊ณ ๋์ด๊ฐ๋ ์ฌ์ฉํ๋ค.
this.props.history.push((
pathname: '์ด๋ํ ๋งํฌ',
state: { detail : ์ ๋ฌํ ํ๋ผ๋ฏธํฐ }
})
์ ๋ฌ ๋ฐ๋ ํ์ด์ง์์๋ ์๋์ฒ๋ผ ๋ถ๋ฌ์จ๋ค
const getparams = this.props.location.state.detail;
์ด๋ ๊ฒ ๋ถ๋ฌ์ค๋ฉด getparams ์์ ์ ๋ฌ๋ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ด์์ ธ ์๋ค.
replace(path,[state]) : [fuction] ์ต๊ทผ ๊ฒฝ๋ก๋ฅผ history ์คํ์์ ๊ต์ฒดํ์ฌ ํ์ด์ง๋ฅผ ์ด๋
go(n) : [function] history ์คํ์ ํฌ์ธํฐ๋ฅผ n๋ฒ์งธ๋ก ์ด๋
goBack() : [function] ์ด์ ํ์ด์ง๋ก ์ด๋
goForward() : [function] ์ ํ์ด์ง๋ก ์ด๋
block(prompt) : [function] history ์คํ์ PUSH/POP ๋์์ ์ ์ด