React-Router 간단한 예제

Juyeon Lee·2022년 6월 23일
0

REACT 리액트

목록 보기
48/65

리액트 라우터 버전 5일때

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

const PageOne = () => {
  return <div> PageOne</div>;
};

const PageTwo = () => {
  return (
    <div>
      PageTwo
      <button>click me</button>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <BrowserRouter>
        <div>
          <Route path="/" exact component={PageOne} />
          <Route path="/pagetwo" exact component={PageTwo} />
        </div>
      </BrowserRouter>
    </div>
  );
};

export default App;

저렇게 exact 꼭 붙여줘야 한다.
한붙여주면 /pagetwo가 /도 contain하기 때문에 둘이 같이 나오게 된다.
참고로 리액트 라우터에서는 html에서 하듯이 a 태그로 해주면 안된다.
그 이유는 a태그로 해서 클릭하면 브라우저가 request를 하고
그럼 server가 index.html파일과 함께 응답을 한다.
그럼 브라우저가 index.html파일을 받는데 그때 예전에 가지고 있던
html를 다 버린다.심지어 자바스크립트 파일들이랑 react state 데이터도
다 같이 버린다. 그리고 다시 빈공간에 새로운걸 보여주게 된다.
근데 이렇게 되면 이미 받아놓은 api파일같은 이런것도 다 싹사라지고
다시 받아야 하기 때문에 이렇게 안쓴다고 한다.
그럼 어떻게 해야하냐면

import React from "react";
import { BrowserRouter, Route, Link } from "react-router-dom";

const PageOne = () => {
  return (
    <div>
      <Link to="/pagetwo">Navigate to Page Two</Link>
    </div>
  );
};

const PageTwo = () => {
  return (
    <div>
      PageTwo
      <button>click me</button>
      <Link to="/">Navigate to Page One</Link>
    </div>
  );
};

const App = () => {
  return (
    <div>
      <BrowserRouter>
        <div>
          <Route path="/" exact component={PageOne} />
          <Route path="/pagetwo" exact component={PageTwo} />
        </div>
      </BrowserRouter>
    </div>
  );
};

export default App;

이런식으로 Link import받아서 넣어주면 된다.
이렇게하면 라우터가 브라우저가 전체 html를 갖다 버리는걸 막아주게 되서
새롭게 데이터 안받아도 페이지만 바뀐다.

0개의 댓글