얼렁뚱땅 공부했던 React 다시 공부하기~!
➡ 대표적으로 react-router-dom
패키지를 사용한다.
import { BrowserRouter, Routes, Route } from "react-router-dom";
import About from "./pages/About";
import Home from "./pages/Home";
import Profile from "./pages/Profile";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/profile" element={<Profile />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
export default App;
import { useParams } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/profile" element={<Profile />} />
<Route path="/profile/:id" element={<Profile />} />
</Routes>
</BrowserRouter>
);
}
function Profile() {
let { id } = useParams();
console.log(id); //2
return <div>Profile page</div>;
}
:
를 통해 설정하고, 사용하는 곳에서 useParams
를 통해 가져와 사용한다.
import { useLocation } from "react-router-dom";
export default function About() {
const { search } = useLocation();
console.log(search);
return <div>About page</div>;
}
http://localhost:3000/about?search=mark
import { useLocation } from "react-router-dom";
export default function About() {
const { search } = useLocation();
const obj = new URLSearchParams(search);
console.log(obj.get("search")); //mark
return <div>About page</div>;
}
npm i query-string // query-string 설치하기
import { useLocation } from "react-router-dom";
import queryString from "query-string";
export default function About() {
const { search } = useLocation();
const query = queryString.parse(search);
console.log(query); // {search: 'mark'}
return (
<div>
<h2>About page</h2>
{query.search && <p>name : {query.search}</p>}
</div>
);
}
v5에서 v6으로 바뀌면서
history
를 사용하는 방식이 바뀌었다. 기존history
의 모든 기능은useNavigate
로 통합되었다.
function App() {
return (
<BrowserRouter>
<Routes>
<Route path="/*" element={<h1>Not Found</h1>} />
<Route path="/" element={<Home />} />
<Route path="/profile" element={<Profile />} />
<Route path="/profile/:id" element={<Profile />} />
<Route path="/about" element={<About />} />
</Routes>
</BrowserRouter>
);
}
v6으로 바뀌면서
switch
문을 더이상 지원하지 않게 되었다.
<a href=""/>
를 사용해 페이지를 연결할 경우, 전체 페이지가 다시 로딩되기 때문에, <Link to=""/>
컴포넌트를 사용한다.
<Link to="/">Home</Link>
<Link to="/profile/1">Profile/1</Link>
<Link to="/about?name=mark">About?name=mark</Link>
props
를 통해 받아와history.push()
로 사용하던 방식이
useNavigate
를 import해서navigate = useNavigate();
사용한다.
import { useNavigate } from "react-router-dom";
const navigate = useNavigate();
function goHome() {
setTimeout(() => {
navigate("/");
//navigate(-1) = history.back()
}, 1000);
}
<Redirect to =""/>
를 통해 Redirect를 시켜주었지만,
<Route/>
의element
안에<Navigate replace to =""/>
를통해 Redirect시켜준다.
import { Navigate } from "react-router-dom";
<Route
path="/Login"
element={isLogin ? <Navigate replace={true} to="/" /> : <Login />}
/>