🐘 react-routerの動的ルーティングをざざっと
作成日: 2021/08/21
1

動的ルーティングの作り方をざざっと

構想

  • 最初はログイン画面
  • ホーム画面からネストしていく

まずは各コンポーネントを作成
コード省略

src/router/homeRoutes.tsx


import Home from '../components/pages/Home';
import Page404 from '../components/pages/Page404';
import Setting from '../components/pages/Setting';
import UserManagement from '../components/pages/UserManagement';

export const homeRoutes = [
  {
    path: '/',
    exact: true,
    children: <Home />,
  },
  {
    path: '/user_management',
    exact: false,
    children: <UserManagement />,
  },
  {
    path: '/setting',
    exact: false,
    children: <Setting />,
  },
  {
    path: '*',
    exact: false,
    children: <Page404 />,
  },
];

src/router/Router.tsx

import { Switch, Route } from 'react-router-dom';
import Login from '../components/pages/Login';
import Page404 from '../components/pages/Page404';
import { homeRoutes } from './homeRoutes';

const Router: React.FC = () => {
  return (
    <Switch>
      <Route exact path='/'>
        <Login />
      </Route>
      <Route
        path='/home'
        render={({ match: { url } }) => (
          <Switch>
            {homeRoutes.map((route) => (
              <Route
                key={route.path}
                exact={route.exact}
                path={`${url}${route.path}`}
              >
                {route.children}
              </Route>
            ))}
          </Switch>
        )}
      />
      <Route path='*'>
        <Page404 />
      </Route>
    </Switch>
  );
};

export default Router;

renderメソッドはデフォルトでpropsを受け取っていて、その中のmatchにurlここではpathで使用している/homeが入っているのであとは別で用意しているhomeRoutesを.mapで回して展開する。pathをテンプレートリテラルで作成すれば出来上がり。