React Router

React-Router란?

  • 리액트는 SPA(Single Page Application) 방식
  • 여러 페이지를 사용하며, 새로운 페이지를 로드하는 기존의 MPA(Multi Page Application) 방식과 달리 새로운 페이지를 로드하지 않고 하나의 페이지 안에서 필요한 데이터만 가져오는 형태를 가짐

  • MPA 방식은 현재의 페이지를 완전히 다시 로드해서 새로 구성
  • MPA 방식에서 다른 페이지로 이동하기 위해선 주로 <a href=””> 태그를 사용하거나 window.location.href 등의 메소드를 사용
  • SPA 방식은 필요한 데이터만 가지고 와서 재로드 없이 렌더링
  • SPA 방식에서는 오직 하나의 페이지만 가지고 있기 때문에 MPA 방식으로의 페이지 이동이 불가능 (html이 아닌 JS파일로 구성 되어 있기 때문)
  • React-Router는 페이지를 새로 불러오지 않는 상황에서 각각의 선택에 따라서 선택된 데이터를 하나의 페이지에서 렌더링 해주는 라이브러리

React-Router 적용

yarn add react-router-dom
//npm install react-router-dom
// src/App.js

import {BrowserRouter, Route} from 'react-router-dom';

...

  • src/inc 디렉토리 생성
  • inc/home.js, inc/test.js 파일 생성
// src/inc/home.js

import React, {Component} from 'react';

class home extends Component{
    render(){
        return(
            <div>
                <h3>This is YeongSu's Blog</h3>
            </div>
        );
    }

}

export default home;
// src/inc/test.js

import React, {Component} from 'react';

class test extends Component{
    render(){
        return(
            <div>
                <h3>This is test page</h3>
            </div>

        );
    }
}

export default test;
import React, {Component} from 'react';
import './App.css';
import {BrowserRouter, Route} from 'react-router-dom';

import Home from './inc/home.js';
import Test from './inc/test.js';

class App2 extends Component{
    constructor(props){
        super(props)
        this.state = {

        }
    }

    render(){
        return(
            <div className='App'>
                <BrowserRouter>
                    <Route path="/" component={Home} />
                    <Route path="/test" component={Test} />
                </BrowserRouter>
            </div>
        );
    }
}

export default App2;
// src/App2.js

import React, {Component} from 'react';
import './App.css';
import {BrowserRouter, Route} from 'react-router-dom';

import Home from './inc/home.js';
import Test from './inc/test.js';

class App2 extends Component{
    constructor(props){
        super(props)
        this.state = {

        }
    }

    render(){
        return(
            <div className='App'>
                <BrowserRouter>     // React-Route를 시작하는 코드. <Route> 코드는 반드시 <BrowserRouter> 안에서 실행되어야함
                    <Route path="/" component={Home} />         // Route 경로를 설정해주는 코드
                    <Route path="/test" component={Test} />     // path는 Route의 속성 값으로 해당 경로의 url을 설정 ("/" 제일 첫번째 경로의 )
                </BrowserRouter>                                // component는 설정한 path의 경로로 이동했을  실행되는 컴포넌트를 설정
            </div>
        );
    }
}

export default App2;
  • test.js 를 실행하는 “/test”의 경로 중 “/” 가 home.js 를 실행하는 “/”와 중복되기 때문에 home.js, test.js 둘 다 실행됨
  • 이러한 중복을 막기 위해 home.js route가 설정된 태그에 아래 코드 추가
<Route path="/" component={Home} exact />

한번의 코드로 해당 디렉토리 모든 파일 불러오기

  • ‘src/inc/index.js’ 생성
// src/inc/index.js

export {default as Home} from './home';
export {default as Test} from './test';
// src/App.js

import {Home, Test} from './inc'

Categories:

Updated:

Comments