single page Application 싱글 페이지 앱
다른 경로에 따라 다른 view(화면)을 보여주는 것이다.
라우팅을 쓰려면 CRA를 이용해서 설치해야한다.
npm install react-router-dom --save
npm start를 했을경우 index.js에 연결시켜준 화면만 구현되고
다른 페이지는 확인되지 못하게 된다.
다른 페이지를 보려면 index.js의 import와 다음값과,
ReactDOM rander()안에 있는 값을 변경시켜줘야한다.
이렇게 번거롭게 하는 방법이 아닌 라우터라는 방법을 이용해서
값을 변경하지 않고 다른 경로의 페이지를 보는 방법을 알아보자.
첫번째 라우트를 보여준다.
현재 경로에서 해당 컴포넌트를 보여주기 위해 사용한다.
정확하게 경로를 잡아주기 위해 사용한다.
exact가 없으면 검색창에 /main이라고 쳐도 안들어가진다.
import React from 'react';
import {
BrowserRouter as Router,
Switch,
Route,
} from 'react-router-dom';
import Login from './pages/Login/Login';
import Main from './pages/Main/Main';
class Routes extends React.Component {
render() {
return (
<Router>
<Switch>
<Route exact path="/" component={Login} />
<Route exact path="/main" component={Main} />
</Switch>
</Router>
)
}
}
export default Routes;
import Routes from './Routes';
ReactDOM.render(
<React.StrictMode>
<Routes />
</React.StrictMode>,
document.getElementById('root')
);
라우트를 사용해서 컴포넌트 간의 이동이 가능하다.
2가지 방법으로 Route 이동이 가능하다.
링크 컴포넌트는 외부사이트로 이동할때나, 프로젝트내에서 페이지로 전환할때 사용된다.
클릭시 바로 이동하는 로직을 구현한다.
ex) Menu, 상품 사진을 클릭 후 상세페이지로 넘어갈때 사용.
import {link} react-router-dom
를 link 태그를 사용할 js 파일에 넣어준다.link to ="/Main"
사용방법은 a태그와 같다.뭔가 검사를 해주고 넘겨도 되는지 할때 withRouter를 쓴다.
ex) 로그인 페이지에서 비밀번호와 아이디를 잘 입력했을때만 다음화면으로 넘어갈때 사용.
import { withRouter } from 'react-router-dom';
를 link 태그를 사용할 js 파일에 넣어준다.withRouter(Login)
감싸줘야한다.import { withRouter } from 'react-router-dom';
class Login extends Component {
goToMain = () => {
this.props.history.push('/main');
}
render() {
return (
<body>
<div className="login-wrap">
<h1 className="title">Westagram</h1>
<div className="inner-wrap">
<input className="id" type="text" placeholder="전화번호, 사용자 이름 또는 이메일" />
<input className="password" type="password" placeholder="비밀번호" />
<button onClick={this.goToMain}>로그인</button>
<p><Link to="/Main">비밀번호를 잊으셨나요?</Link></p>
</div>
</div>
</body>
);
}
}
export default withRouter(Login);
함수안에 this.props.history.push('/main')
한번 더 해석하고 넘어가자.
History API를 사용하여 페이지를 새로고침하지 않고도 주소를 변경할 수 있게 해준다.
(즉, 페이지 변경으로 인한 깜빡거림이 없다.)
또, 현재 주소에 관련된 정보를 props로 조회 및 사용이 가능하도록 만들어준다.