사이트를 만들기 전에 먼저 필요한 페이지를 확인한 후 각 페이지별 경로지정을 해준다.
npm i react-router-dom
// index.js
import React from "react";
import ReactDOM from "react-dom/client";
import "./index.css";
import App from "./App";
import { createBrowserRouter } from "react-router-dom";
import NotFound from "./page/NotFound";
import Home from "./page/Home";
import AllProducts from "./page/AllProducts";
import NewProduct from "./page/NewProduct";
import ProductDetail from "./page/ProductDetail";
import MyCart from "./page/MyCart";
import { RouterProvider } from "react-router-dom";
const router = createBrowserRouter([
{
path: "/",
element: <App />,
errorElement: <NotFound />,
children: [
{ index: true, path: "/", element: <Home /> }, //index로 '/' 메인페이지 지정
{ path: "/products", element: <AllProducts /> },
{
path: "/products/new",
element: <NewProduct />
},
{
path: "/products/:id", // product / id 일경우 detail page로 이동
element: <ProductDetail />,
},
{
path: "/carts",
element:<MyCart />
},
],
},
]);
const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(
<React.StrictMode>
<RouterProvider router={router} /> //router지정
</React.StrictMode>
);
// App.js
import { Outlet } from "react-router-dom";
import "./App.css";
import Navbar from "./components/Navbar";
function App() {
return (
<>
<Navbar />
<Outlet /> // index.js에서 지정한 children을 보여줌
</>
);
}
export default App;
// Navbar.js
import { Link } from "react-router-dom";
import User from "./User";
import Button from "./ui/Button";
function Navbar() {
return (
<header>
<Link to="/">
<h1>MIOGY STUDIO</h1>
</Link>
<nav>
<Link to="/products">Products</Link>
<Link to="/carts">Carts</Link>
<Link to="/products/new">New</Link>
<User />
<Button>Login</Button>
</nav>
</header>
);
}
export default Navbar;
// Button.js
export default function Button({ text, onClick }) {
return (
<button onClick={onClick}>
{text} // Navbar.js : 버튼 내에 지정된 text를 props받아서 적용
</button>
);
}
// Navbar.js에서 버튼 수정
{!user && <Button text="Login" onClick={login}></Button>}
{user && <Button text="Logout" onClick={logout}></Button>}
다음은 Firebase를 이용하여 구글로그인 적용을 해본다.
기존에 방식은 상위컴포넌트에서 Router > Header > Routes > Route path="/" element={ < 컴포넌트 /> } 방식으로 진행을 했다. 처음 Router사용했을때의 방식이 베어 있어 그대로만 사용하려 했었던 것 같다. 이번에 createBrowserRouter를 사용하여 라우터 설정을 따로 하고 보니 코드가 잘 보이는 것 같다.