리액트는 SPA(Single Page Application)구조를 사용하므로 index.html은 하나만 존재하며, 경로에 따라 페이지 전환을 해주어야 한다.
라우팅(Routing)이란 다른 경로(url)에 따라 다른 View를 보여주는 것 - 리액트 자체에 기능이 없기 때문에 가장 많이 쓰는 React-router
를 사용한다.
가장 인기있는 routing solution인 react-router
설정
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'));
Route 이동하는 방법은 Link와 withRouterHOC 의 두가지 방법이 있다.
react
에서는 외부 페이지로 이동할 때는 <a>
태그를 사용하지만 프로젝트 내에서 페이지 전환을 할 때는 <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;
import React from 'react';
import { withRouter } from 'react-router-dom';
class Login extends React.Component {
goToMain = () => {
this.props.history.push('/main');
}
// 실제 활용 예시
// goToMain = () => {
// if(response.message === "valid user"){
// this.props.history.push('/main');
// } else {
// alert("너 우리 회원 아님. 가입 먼저 해주세요")
// this.props.history.push('/signup');
// }
// }
render() {
return (
<div>
<button
className="loginBtn"
onClick={this.goToMain}
>
로그인
</button>
</div>
)
}
}
export default withRouter(Login);