[React Router & styled-components] ์ค์ ์์ withRouter๋ฅผ ์ฌ์ฉํ๊ธฐ(1) :: Router ๊ตฌ์ฑํ๊ธฐ
ํด๋น ์๋ฆฌ์ฆ๋ ์ด 3๋ถ์์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค.
- ์ค์ ์์ withRouter๋ฅผ ์ฌ์ฉํ๊ธฐ(1) :: Router ๊ตฌ์ฑํ๊ธฐ
- ์ค์ ์์ withRouter๋ฅผ ์ฌ์ฉํ๊ธฐ(2) :: styled-components๋ฅผ ํ์ฉํ์ฌ ์คํ์ผ๋ง ์ ์ฉํ๊ธฐ
- ์ค์ ์์ withRouter๋ฅผ ์ฌ์ฉํ๊ธฐ(3) :: withRouter ์ฌ์ฉํ๊ธฐ
ํด๋น ์๋ฆฌ์ฆ์๋ react์ styled-components์ ๋ํ ์ฝ๋๊ฐ ๋์ฌ ๊ฒ์ด๋ค.
์ง๊ธ ์ฐ๋ฆฌ๋ withRouter
์ ๋ํด์ ์์๋ณด๋ ๊ณผ์ ์ด๋ฏ๋ก styled-components์ ๋ํด์ ์ ๋ชจ๋ฅด๋ ์ฌ๋์ ๊ทธ๋ฅ css ์ ์ฉ์ js ์์์ ์ํํ๊ตฌ๋~ ์ ๋๋ง ์ดํดํ๊ณ ๋์ด๊ฐ๋๋ก ํ์.
ํ์ง๋ง ๊ฐ์ธ์ ์ธ ์ถ์ฒ์ผ๋ก styled-components์ ๋ํด์ ๋ชจ๋ฅด๋ ์ฌ๋์ ์ ๋ง ๋ฉ์ง๊ณ ์ฟจํ ๊ธฐ๋ฅ์ด๋ฏ๋ก ํด๋น ๋ธ๋ก๊ทธ์
styled-components ์นดํ
๊ณ ๋ฆฌ์์ ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ Styled-Components์ ์ฒ ํ์ ๋ํด์ ์กฐ๊ธ ๋ด๋ณด๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋ ฅํ ์ถ์ฒํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ๋ฆฌ๋
์ด๋ฐ ์น ์ฌ์ดํธ์ ์๋จ header๋ฅผ ๊ตฌํํ ๊ฒ์ด๊ณ , ํด๋ฆญํ๋ ์์น๋ง๋ค border-bottom์ ์์ด ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ค.
withRouter
withRouter๋ ์ปดํฌ๋ํธ์์ router์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
๋ง์ฝ withRouter๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด this.context.router๋ก ์ ๊ทผํ ์ ์๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฝ์ง ์๊ณ ์คํ๋ ค ์ฝ๋์ ๊ฐ๋ ์ฑ์ ์ฃฝ์ผ ์ ์๋ค.
๊ทธ๋์ withRouter์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ๋ค.
withRouter๋ Route๊ฐ ์๋ ์ปดํฌ๋ํธ์์ location, match, history ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
withRouter๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๋ง์ง๋ง ํฌ๊ฒ
- ๋ณดํต ๋ก๊ทธ์ธ ์ฑ๊ณตํ์๋ ํน์ ๊ฒฝ๋ก๋ก ๊ฐ๊ณ ์คํจํ๋ฉด ๊ฐ๋งํ ์๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค.
- ํน์ ํ์ฌ ์์น๋ฅผ ์ด์ฉํด์ ๋ฌด์ธ๊ฐ๋ฅผ ํ ๋ ์ฌ์ฉ๋๋ค.
- ํ์ฌ ์์น๋ฅผ ๊ธฐ์ตํ๊ณ ๋น๊ตํ ๋ ์ฌ์ฉ๋๋ค.
ํ ๋ฒ ์ค์ต์ ํตํด withRouter๋ฅผ ์ฌ์ฉํด๋ณด์.
์ฝ๋ฉํ๊ธฐ
์ฐ๋ฆฌ๋ ์์ ๋ณธ ๋์์ธ๋ฒ ์ด์ค์ ํ์ด์ง๋ฅผ ํด๋ก ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํด๋น ํ์ด์ง๋ฅผ js ํ์ผ๋ก ๋๋๊ธฐ ์ํด ๊ฐ๋จํ๊ฒ ๋ถ์ํด๋ณด์.
์์์ Introduce.js๊ฐ ์๋๋ฐ ์ข ๋ ์ฝ๊ณ ์ง๊ด์ ์ธ ๋จ์ด๋ฅผ ์ํด About.js๋ก ๋ณ๊ฒฝํ๊ฒ ๋ค.
๊ธฐ๋ณธ์ ์ธ Routing ํ๊ฒฝ ๊ตฌ์ฑํ๊ธฐ
์์ ๊ฐ์ด ๊ตฌ์ฑํด๋ณด์.
๊ตฌ์ฑํ๊ธฐ ์ ์ react-router-dom
์ ์์กด์ฑ ์ถ๊ฐํด์ผํ๋ค.
์ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ฆฌ์กํธ๊ฐ ํ์ด์ง๋ฅผ ๋ผ์ฐํ ํ๋ ๋ฐฉ๋ฒ (3)react-router-dom ์ผ๋ก ๋ผ์ฐํ ํ๊ธฐ์ ๋ค์ด๊ฐ์ ์ค๋น๋ฅผ ๋ง์น๊ณ ์ค์.
๊ทธ๋ฆฌ๊ณ import
์ ๊ฐ์ ์ค๋ณต๋๋ ๊ณผ์ ์ ๋ชจ๋ ์๋ตํ๋ค.
import React from 'react';
import { BrowserRouter as Router, Switch, Route, Link } from "react-router-dom";
์ฝ๋๋ฅผ ํ์ธํด๋ณด์.
// Header.js
export const Header = () => {
return (
<header>
<Link to="/">DESIGN BASE</Link>
<Link to="/about">์๊ฐ</Link>
<Link to="/course-design">๋์์ธ ๊ฐ์ข</Link>
<Link to="/course-coding">์น์ฝ๋ฉ ๊ฐ์ข</Link>
<Link to="/bookmark">๋ถ๋งํฌ</Link>
<Link to="/meetup">๋ฐ์
</Link>
<Link to="/contact">๋ฌธ์ํ๊ธฐ</Link>
</header>
);
}
// Routes.js
export const Routes = () => {
return (
<Switch>
<Route exact path="/" component={Home} />
<Route path="/about" component={About} />
<Route path="/course-design" component={CourseDesign} />
<Route path="/course-coding" component={CourseCoding} />
<Route path="/bookmark" component={Bookmark} />
<Route path="/meetup" component={MeetUp} />
<Route path="/contact" component={Contact} />
</Switch>
);
}
// About.js
export default About => "์๊ฐ";
// Bookmark.js
export default Bookmark => "๋ถ๋งํฌ";
// Contact.js
export default Contact => "๋ฌธ์ํ๊ธฐ";
// CourseCoding.js
export default CourseCoding => "์น ์ฝ๋ฉ ์
๋ฌธ";
// CourseDesign.js
export default CourseDesign => "๋์์ธ ๊ฐ์ข";
// Home.js
export default Home => "๊ฐ์ธ์ ์ผ๋ก ๋๋ฌด ๋ฉ์ง๋ค๊ณ ์๊ฐํ๋ DesignBase์ Main ํ์ด์ง";
// MeetUp.js
export default MeetUp => "๋ฐ์
"
// App.js
export const App = () => {
return (
<>
<Router> // BrowserRouter
<Header />
<Routes />
</Router>
</>
);
}
export default App;
๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ด ๋์จ๋ค.
์ด์ ์ค๋น๊ฐ ๋ค ๋๋ฌ์ผ๋ ์คํ์ผ๋ง์ ์กฐ๊ธ ์ ์ฉํด๋ณด๋๋ก ํ์.