- SPA(Single Page Application) - 페이지(html)가 한개인 애플리케이션()
- 리액프 프로젝트에서 .html 파일의 개수는 1개이다.
- Routing이란 다른 경로에 따라 다른 view(화면)을 보여주는 것이다.
- 리액트 자체에는 이러한 기능이 내장되어 있지않다.
- 리액트가 Framework가 아닌 Library로 분류되는 이유
React-router
는 리액트의 라우팅 기능을 위해 가장 많이 사용되는 라이브러리이다.
Create React App(CRA)에 특별히 routing을 위한 로직이 들어있지 않기 때문에, 가장 인기 있는 routing solution인 react-route를 추가해서 routing을 구현.
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> // 1번 대응
<Switch> // 2번 연결
<Route exact path="/" component={Login} /> // 3번 경로, 보여주고 싶은 컴포
<Route exact path="/signup" component={Signup} />
// `/`가 포함되어 있기때문에 정확한 경로를 위해 exact를 사용한다.
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
Route 이동하는 방법은 두 가지가 있다.
<Link>
컴포넌트 사용하는 방법import React from 'react';
import { Link } from 'react-router-dom';
class Login extends React.Component {
render() {
return (
<div>
<Link to="/signup">회원가입</Link>
//라우트에서 설정한 경로 signup ->component
</div>
)
}
}
export default Login;
react-router-dom
에서 제공하는 <Link>
컴포넌트는 DOM에서 <a>
로 변환(Compile) 된다.<a>
태그와 마찬가지로 <Link>
태그도 지정한 경로로 바로 이동시켜주는 기능을 합니다.<a>
- 외부 사이트로 이동하는 경우<Link>
- 프로젝트 내에서 페이지 전환하는 경우import React from 'react';
import { withRouter } from 'react-router-dom';
class Login extends React.Component {
goToMain = () => {
this.props.history.push('/signup');
//콘솔로 확인
// withRouter는 조건이 필요할때 사용 쌉가능
}
** // 실제 활용 예시
// 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);
<Link />
를 사용하지 않고 요소에 onClick 이벤트를 통해 페이지를 이동하는 방법도 있다.goToMain
라는 event handler에서 구현한 것처럼 props 객체의 history (this.props.history
) 에 접근해서 이동할 수 있다.history
의 push
메서드의 인자로 Routes.js
에서 설정한 path를 넘겨주면, 해당 라우트로 이동할 수 있다.history
)를 받으려면 export하는 컴포넌트에 withRouter
로 감싸주어야 한다.withRouter
와 같이 해당 컴포넌트를 감싸주는 것을 Higher Order Component (이하 HOC) 라고 한다.<Link>