라우팅 ? 다른 주소에 따라 다른 뷰를 보여주는 것
리액트 자체에는 라우팅 기능이 내장되어 있지 않기 때문에 react-router 라이브러리를 이용한다.
react-router는 써드파티 라이브러리로서 클라이언트 사이드에서 이뤄지는 라우팅을 간단하게 해주는 라이브러리
<Route path="/" component={} />
path: 경로
component: 보여줄 컴포넌트
만약 exact path
라면 주어진 경로와 정확히 맞아떨어져야만 설정한 컴포넌트를 보여줌
// App.js
<Route path="/about/:name" component={About} />
// About.js
const About = ({ match }) => {
return (
<div>
<h2>About {match}</h2>
</div>
)
}
console.log(match); // params가 넘어오는걸 확인할 수 있다.
query-string
모듈 설치 location
객체를 이용하여 확인 onst About = ({ location, match }) => {
console.log(location);
const query = queryString.parse(location.search)
const detail = query.detail === 'true';
console.log(query)
return (
<div>
<h2>About {match.params.name}</h2>
{detail && 'detail : blahblah'}
</div>
)
}
라우트들을 Switch
컴포넌트에 감싸면 매칭되는 첫 번째 라우트만 보여주고 나머지는 보여주지 않는다.
<Switch>
<Route path="/about/:name" component={About} />
<Route path="/about" component={About} />
</Switch>
import queryString from 'query-string';
<a href...></a>
방식은 페이지를 새로고침 하는 방식<Link>
컴포넌트는 새로고침을 하지않고 원하는 라우트로 화면 전환을 해줌const Menu = () => {
return (
<div>
<ul>
<li><Link to="/">Home</Link></li>
<li><Link to="/about">About</Link></li>
<li><Link to="/about/foo">About Foo</Link></li>
</ul>
</div>
)
}
Route와 Link의 차이를 생각해보자.
Route는 path에 적힌 경로로 요청이 들어왔을 때 component를 보여준다.
반면, Link는 a 태그와 같이 to에 적힌 경로로 페이지 요청을 하는 것이다. Link 컴포넌트에서 to="/about" 으로 요청을 하면 Route에 적힌 path="/about"이 요청을 받고 component={About}을 보여주는 것.
const activeStyle = {
color: 'green',
fontSize: '2rem'
}
<li><NavLink exact to="/" activeStyle={activeStyle}>Home</NavLink></li>
<li><NavLink exact to="/about" activeStyle={activeStyle}>About</NavLink></li>
<li><NavLink exact to="/about/foo" activeStyle={activeStyle}>About Foo</NavLink></li>