웹 애플리케이션에서 라우팅이라는 개념은 사용자가 요청한 URL에 따라 알맞는 페이지를 보여주는 것을 의미한다.
react-router-dom 버전 6 에서는 element 로 컴포넌트를 만들어야 동작하고, component 로 된 것은 에러 발생하고 동작되지 않는다.
V6 에서는 Switch 가 사라지고, Routes 로 대체되었다.
Routes는 기존 Switch 처럼 경로 순서를 기준으로 선택하는 것이 아닌, 가장 일치하는 route 기반으로 선택하게 된다.
useHistory 가 사라지고, useNavigate 로 대체되었다.
- useNavigate로 기존에 useHistory의 기능을 전부 대체 가능하다.
- useHistory의 history는 객체였지만 useNavigate의 navigate는 함수다.
Route에 children, component가 사라지고, element 사용한다.
npm install react-router-dom // 라이브러리 설치
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {BrowserRouter} from "react-router-dom";
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<BrowserRouter>
<App />
</BrowserRouter>
);
reportWebVitals();
|
Route에 exact Prop 사라졌다. exact가 기본으로 되어있다.
기존 Route는 꼭 Switch 가 상위 요소로 없어도 되지만, v6의 Route는 Routes의 직속 자식이어야 한다.
import {Route, Routes, useParams} from "react-router-dom";
import Home from "./pages/Home";
import Profile from "./pages/Profile";
import About from "./pages/About";
function App() {
const { id } = useParams();
return (
<Routes>
<Route exact={true} path="/" element={<Home />}/>
<Route path="/profile" element={<Profile/>}/>
<Route path="/profile/:id" element={<Profile/>}/>
<Route path="/about" element={<About/>}/>
</Routes>
);
}
export default App;
|
Link 는 컴포넌트, to 는 props
import React from 'react';
import {Link} from "react-router-dom";
const Home = () => {
return (
<div>
<h1>Home 페이지입니다.</h1>
<Link to={"/about?name=react"}>소개</Link>
</div>
);
};
export default Home;
|
Profile = (props) => 를 사용하지 말라.
http://localhost:3000/profile/4 를 해보면 결과를 확인할 수 있다.
import React from 'react';
import {useParams} from "react-router-dom";
const Profile = () => {
// react-router-dom 버전 6부터는 element로 컴포넌트를 만들고
// route props(match, history, location)을 받지 않는다.
// useParams, useLocation, useHistory를 사용하여 route context에 접근한다.
// let id = props.match.params.id 를 사용하면 에러 발생한다.
const { id } = useParams();
return (
<div>
<h1>Profile 페이지입니다.</h1>
{id && <h3>ID: {id}</h3>}
</div>
);
};
export default Profile;
|
Query String 에 대한 사항은 다음 게시글을 읽어보면 된다.
https://link2me.tistory.com/2177
'React > React' 카테고리의 다른 글
React CORS error 해결 방법 (0) | 2022.08.20 |
---|---|
React Query String (0) | 2022.06.08 |
React useState (0) | 2022.06.04 |
React 값 전달(부모 → 자식, 자식 → 부모) (0) | 2022.06.03 |
React Event 처리하기 (0) | 2022.05.29 |