.html
파일의 개수는 1개이며 SPA(Single Page Application) 이라고 한다.라우팅(Routing)
이란 다른 경로(url 주소)에 따라 다른 View(화면)를 보여주는 것 입니다.
React-router
는 리액트의 라우팅 기능을 위해 가장 많이 사용 되는 라이브러리입니다.React-router
와 같이 리액트 자체에 내장되어있지 않은 기능을 다른 라이브러리로 사용할 수 있으며 이런 라이브러리를 Third-party Library 라고 합니다.npm install react-router-dom --save
import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
} from 'react-router-dom';
import Login from './pages/Login/Login';
import Signup from './pages/Signup/Signup';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/signup" component={Signup}/>
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
ReactDOM.render(<Routes />, document.getElementById('root'));
<App />
컴포넌트 대신에 routing을 설정한 컴포넌트(<Routes />
)로 변경하여 확인 가능합니다.Route 이동하는 방법은 두 가지가 있습니다.
<Link>
컴포넌트 사용하는 방법<Link>
컴포넌트 사용하는 방법import React from 'react';
import { Link } from 'react-router-dom';
class Login extends React.Component {
render() {
return (
<div>
<Link to="/signup">회원가입</Link>
</div>
)
}
}
export default Login;
react-router-dom
에서 제공하는 <Link>
컴포넌트는 DOM에서 <a>
로 변환(Compile) 됩니다.<a>
태그와 마찬가지로 <Link>
태그도 지정한 경로로 바로 이동시켜주는 기능을 합니다.<a>
vs. <Link>
<a>
- 외부 사이트로 이동하는 경우<Link>
- 프로젝트 내에서 페이지 전환하는 경우import React from 'react';
import { withRouter } from 'react-router-dom';
class Login extends React.Component {
goToMain = () => {
this.props.history.push('/main');
}
render() {
return (
<div>
<button
className="loginBtn"
onClick={this.goToMain}
>
로그인
</button>
</div>
)
}
}
export default withRouter(Login);
<Link />
를 사용하지 않고 요소에 withRouterHOC
를 사용할 수 있습니다.props
객체의 history (this.props.history
) 에 접근해서 이동할 수 있습니다.history
의 push
메서드의 인자로 Routes.js
에서 설정한 path를 넘겨주면 해당 라우트로 이동할 수 있습니다.history
)를 받으려면 export하는 컴포넌트에 withRouter
로 감싸주어야 합니다.withRouter
로 감싸주지 않을 경우 Routes 컴포넌트를 통해 이동할 경우 props
가 있으나 Routes 컴포넌트 이동한 하위 컴포넌트에서는 props
가 존재하지 않아 this.props.history
를 통해 이동 할 수 없다.withRouter
로 해당 컴포넌트를 감싸주는 것을 Higher Order Component (이하 HOC) 라고 합니다.<Link>
withRouterHOC