[공식문서 보는 방법]
1. 왜 써야하는지?
2. Getting Started 훝어보기 (기능을 보면서 큰그림을 보기 => 외울 필요는 없다)
3. 프로젝트에서 참고한다.
> 왜 써야하는가?
SPA 장점을 활용하면서 History 사용하기 위해서 React-router 를 사용한다.
> Getting Started
중첩경로 (레이아웃), 로더(데이터 로딩), NavLink 의 활성 링크, action?, redirect, defer, 낙관적 UI
> Project
App.jsx
import { createBrowserRouter, RouterProvider } from "react-router-dom";
import Home from "./pages/Home";
import NotFound from "./pages/NotFound";
import Videos from "./pages/Videos";
import Root from "./pages/Root";
import VideoDetail from "./pages/VideoDetail";
const router = createBrowserRouter([
{
path: "/",
element: <Root />,
errorElement: <NotFound />, // 에러페이지
children: [
{
index: true,
element: <Home />,
},
{
path: "/videos",
element: <Videos />,
},
{
path: "/videos/:videoId",
element: <VideoDetail />,
},
],
},
]);
function App() {
return <RouterProvider router={router} />;
}
export default App;
Root.jsx => Outlet
import React from "react";
import { Outlet } from "react-router-dom";
import Navbar from "../components/Navbar";
const Root = () => {
return (
<div>
<Navbar />
<Outlet />
</div>
);
};
export default Root;
Navbar.jsx => Link
import React from "react";
import { Link } from "react-router-dom";
const Navbar = () => {
return (
<nav>
<Link to="/">Home</Link>
<Link to="/videos">Videos</Link>
</nav>
);
};
export default Navbar;
Videos.jsx => useNavigate
import React, { useState } from "react";
import { useNavigate } from "react-router-dom";
const Videos = () => {
const [text, setText] = useState();
const navigate = useNavigate();
const handleChange = (e) => {
const value = e.currentTarget.value;
setText(value);
};
const handleSubmit = (e) => {
e.preventDefault();
navigate(`/videos/${text}`);
setText("");
};
return (
<div>
<form onSubmit={handleSubmit}>
<input type="text" placeholder="video id: " value={text} onChange={handleChange} />
</form>
</div>
);
};
export default Videos;
VideoDetail.jsx ==> useParams
import React from "react";
import { useParams } from "react-router-dom";
const VideoDetail = () => {
const { videoId } = useParams();
return <div>VideoDetail {videoId}</div>;
};
export default VideoDetail;
'Frontend' 카테고리의 다른 글
RTK Query 란? (0) | 2023.04.13 |
---|---|
[Vue3] Vue + Vite + Typescript 초기세팅 (0) | 2023.03.23 |