Router를 이용하면 페이지의 이동이 가능합니다.

아래와 같이 사용한다면 페이지 링크 이동하며 해당 컴포넌트로 접근이 가능합니다.

import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import NavBar from "./components/NavBar";
import CreatePage from "./pages/CreatePage";
import EditPage from "./pages/EditPage";
import HomePage from "./pages/HomePage";
import ListPage from "./pages/ListPage";

function App() {
    return (
        <Router>
            <NavBar />
            <div className="container">
                <Switch>
                    <Route path="/" exact>
                        <HomePage />
                    </Route>
                    <Route path="/blogs" exact>
                        <ListPage />
                    </Route>
                    <Route path="/blogs/create" exact>
                        <CreatePage />
                    </Route>
                    <Route path="/blogs/edit" exact>
                        <EditPage />
                    </Route>
                </Switch>
            </div>
        </Router>
    );
}

export default App;

 

<Route path="" exact> 컴포넌트 </Route> 해당 코드가 계속적으로 중복이 되고있습니다.

 

이는 map을 이용해서 코드 중복을 줄일 수 있습니다.

컴포넌트 객체도 object 안에 저장할 수 있습니다.

 

아래와 같이 링크와 컴포넌트를 object로 만들어줍니다.

const routes = [
    {
        path: "/",
        component: HomePage,
    },
    {
        path: "/blogs",
        component: ListPage,
    },
    {
        path: "/blogs/create",
        component: CreatePage,
    },
    {
        path: "/blogs/edit",
        component: EditPage,
    },
];

export default routes;

 

이와 같이 객체에 있는 값을 map으로 뽑으면서 컴포넌트를 생성해줍니다.

<Switch>
    {routes.map((route) => {
        return <Route exact path={route.path} componet={route.componet} />;
    })}
</Switch>

 

전체코드입니다!

중복된 코드를 제거할 수 있었습니다.

import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import NavBar from "./components/NavBar";
import HomePage from "./pages/HomePage";
import ListPage from "./pages/ListPage";
import CreatePage from "./pages/CreatePage";
import EditPage from "./pages/EditPage";


const routes = [
    {
        path: "/",
        component: HomePage,
    },
    {
        path: "/blogs",
        component: ListPage,
    },
    {
        path: "/blogs/create",
        component: CreatePage,
    },
    {
        path: "/blogs/edit",
        component: EditPage,
    },
];


function App() {
    return (
        <Router>
            <NavBar />
            <div className="container">
                <Switch>
                    {routes.map((route) => {
                        return <Route exact path={route.path} componet={route.componet} />;
                    })}
                </Switch>
            </div>
        </Router>
    );
}

export default App;

 

따로 파일로 분리해서 만들고 필요한 부분에서 import 해서 사용하면 더 좋습니다!

 

key가 없으면 에러가 발생하므로 key를 추가해줘야합니다.

key는 중복되면 안되므로 path를 key로 설정해주었습니다.

import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import NavBar from "./components/NavBar";
import routes from "./routes";

function App() {
    return (
        <Router>
            <NavBar />
            <div className="container">
                <Switch>
                    {routes.map((route) => {
                        return <Route key={route.path} exact path={route.path} componet={route.componet} />;
                    })}
                </Switch>
            </div>
        </Router>
    );
}

export default App;
[React] object와 map을 이용해서 Route의 코드 중복 제거