Web dev/React

React / react-router-dom v5 와 v6 라우팅 설정

양여리 2022. 3. 3. 20:19
728x90
반응형

react-router-dom v6로 2021년 11월쯤 바뀐 것 같다.

버전 업데이트가 되면서 약간씩 변화가 생겼다.

v6로 connetedrouter 를 사용했었는데 아직 호환이 안되는듯 싶어 v5로 다운그레이드하여 했다.

 

v5 다운 그레이드

npm i react-router-dom@5.2.0

 

 

1. 라우팅 설정 switch 와 routes , component 와 element 

 

v5 방식

import { BrowserRouter, Route, Switch } from "react-router-dom";
import Home from "./pages/Home";
import Write from "./pages/Write";

function App() {
  return (
    <BrowserRouter>
      <Switch>
        <Route path="/" component={() => <Home />} />
        <Route exact path="/write" component={() => <Write />} />
        <Route component={() => <div>Page Not Found</div>} />
      </Switch>
    </BrowserRouter>
  );
}

export default App;

1. Switch를 사용한다.

2. exact로 복수의 라우팅을 막습니다.

3. component={} 내에 arrow function을 사용하여 component를 전달합니다.

 

v6 방식

import React from "react";
import { BrowserRouter, Route, Routes } from "react-router-dom";
import { Main, Page1, Page2, NotFound } from "../pages";
import { Header } from ".";

const Router = () => {
  return (
    <BrowserRouter>
      <Header />
      <Routes>
        <Route path="/" element={<Main />} />
        <Route path="/page1/*" element={<Page1 />} />
        <Route path="/page2/*" element={<Page2 />} />
        <Route path="/*" element={<NotFound />} />
      </Routes>
    </BrowserRouter>
  );
};

export default Router;

1. exact 는 더이상 사용하지 않고 여러 라우팅을 매칭하고 싶은 경우 URL 뒤에 * 을 사용합니다.

2. component 대신 elemet로 바로 component를 전달합니다.

 

 

2.리다이렉트 설정 useHistoy 와 useNavgate 

 

v5 방식

import { useHistory } from "react-router-dom";

function App() {
  let history = useHistory();
  function handleClick() {
	    history.push("/home");
  }
  return (
    <div>
      <button onClick={handleClick}>go home</button>
    </div>
  );
}

v6 방식

import { useNavigate } from "react-router-dom";

function App() {
  let navigate = useNavigate();
  function handleClick() {
    navigate("/home");
  }
  return (
    <div>
      <button onClick={handleClick}>go home</button>
    </div>
  );
}

 

 

 

출처 : https://velog.io/@soryeongk/ReactRouterDomV6

 

728x90
반응형