리액트에서 라우터 기능을 사용해보았습니다.
라우터에 대한 정의는 아래 문서를 참고하세요.
yarn add react-router-dom
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import * as serviceWorker from './serviceWorker';
import { BrowserRouter } from 'react-router-dom';
ReactDOM.render(
<BrowserRouter>
<App />
</BrowserRouter>,
document.getElementById('root')
);
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
// Learn more about service workers: https://bit.ly/CRA-PWA
serviceWorker.unregister();
index.js에 BrowserRouter를 불러옵니다.
import React from 'react';
const first = () => {
return (
<div>
<h1>첫 페이지</h1>
<p>가장 먼저 보여지는 페이지입니다.</p>
</div>
);
};
export default first;
import React from 'react';
const About = () => {
return (
<div>
<h1>소개</h1>
<p>리액트 라우터 사용해보기.</p>
</div>
);
};
export default About;
import React from 'react';
import { Route } from 'react-router-dom';
import About from './About';
import Home from './first';
const App = () => {
return (
<div>
<Route path="/" component={first} />
<Route path="/about" component={About} />
</div>
);
};
export default App;
App.js에서 경로를 연결한대로 결과가 보여집니다. "/" 경로로 들어가면 first.js 컴포넌트가 뜨고,
localhost:3000/about 경로로 들어가면 about.js가 나타나게됩니다.
import React from 'react';
import { Route , Link } from 'react-router-dom';
import first from './first';
import about from './about';
import './App.css';
const App = () => {
return (
<div>
<ul>
<li>
<Link to="/">FIRST</Link>
</li>
<li>
<Link to="/about">SECOND</Link>
</li>
</ul>
<hr/>
<Route path="/" exact={true} component={first} />
<Route path="/about" component={about} />
</div>
);
};
export default App;
<a>
태그는 페이지를 아예 새로 불러오게되고, 렌더링된 컴포넌트도 전부 새로 불러오지만,
<Link>
는 클릭 시 다른 주소로 이동시킵니다. Histroy API 를 사용하기 때문에 주소만 바꿀뿐 페이지를 새로 불러오지는 않습니다.
만약에 a태그를 써야된다면, e.preventdefault()
를 같이 쓰면 됩니다.
exact={true}
: path가 /일 경우, / 뿐만 아니라 /로 시작하는 모든 URL 경로, 사실 상 가능한 모든 경우의 수의 경로와 매치가 되버림. 그래서 exact prop
이 없으면, 의도치 않게 first 컴포넌트가 URL 경로와 상관없이 항상 보여지게 됨. 하지만 exact prop
을 붙여주면 URL 경로 값이 <Route>
의 path 값과 완벽히 전체가 일치해야 매치되는 것으로 처리가 됨.
exact prop
을 지우고 localhost:3000/about 경로를 들어가게되면, 둘다 /로 시작하기 때문에 first 컴포넌트랑 about컴포넌트가 보여지게됩니다.