Single Page Application 으로 말 그대로 페이지가 한 개인 애플리케이션을 말한다. 리액트 프로젝트에서는 .html 파일의 개수가 1개이다.
그러면 페이지는 하나인데 어떻게 여러 개의 페이지를 보여주냐?
한개의 웹페이지안에서 여러 개의 페이지를 보여주기 위해서는 routing을 사용한다.
라우팅이란 경로에 따라 다른 view를 보여주는 것이다. Routing 은 리액트 자체에 내장되어 있지않아서 설치를 따로 해야한다.
이런것을 보면 리엑트는 프레임워크가 아니라 라이브러리라는 것이 확실한거같다.
create React App(CRA)에 특별히 라우팅을 위한 로직이 들어있지 않기 떄문에, 가장 인기 있는 routing soliuution인 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 '로그인 페이지 경로'; import Main from '메인 페이지 경로;' 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;
1 . 컴포넌트 사용하는 방법
2 . withRouterHOC로 구현하는 방법
import React from 'react'; import {Link} from 'react-router-dom'; class Login extends React.Component { render(){ return( <div> <Link to="/main"><Link> </div> ) } } export default Login;
react-router-dom에서 제공하는 Link컴포넌트로 dom에서 a태그로 변환된다.
a태그와 Link의 차임점!!!!
import React from 'react'; import {withRouter} from 'react-router-dom'; cass Login extends React.Component { goToMain = () => { this.props.history.push('/main'); } render() { return( <div> <button className = "loginBtn" onClick={this.goToMain}>로그인</button> </div> ) } export defalut withRouter{Login};
Link를 사용하지 않고 요소에 onClick 이벤트를 통해 이동할 수 있다.
goToMain 이라는 eventhandler에서 구현한 것처럼 props 객체의 history에 접근하여 이동할 수 있다.