본문 바로가기

WEB개발/REACT

vite-plugin-route-meta

현재 vite-plugin-route-meta 라는 이름으로 널리 알려진 공식 패키지는 확인되지 않지만, Vite 생태계에서는 **“라우트 메타(route meta)”**를 다루는 플러그인들이 파일 기반 라우팅과 함께 메타데이터를 설정/확장해주는 역할로 많이 사용됩니다.

 

vite-plugin-route-meta 계열의 목적은
RouteObject에 meta: { ... }를 “자동으로/편하게” 붙여주는 것입니다.

{
  path: '/dashboard',
  element: <Dashboard />,
  meta: {
    requiresAuth: true,
    title: '대시보드',
  },
}

 

React Router(RouteObject)는 공식적으로 meta를 해석하지 않습니다.

 

메타선언 방법

 

1) RouteObject에 직접 선언 (기본)

{
  path: '/dashboard',
  element: <Dashboard />,
  meta: {
    requiresAuth: true,
    title: '대시보드',
  },
}

 

2) 페이지 파일 옆에 선언 (플러그인 방식)

// 빌드 시 RouteObject에 병합
meta: routeMeta
// pages/dashboard.tsx
export const routeMeta = {
  requiresAuth: true,
  title: '대시보드',
};

export default function Dashboard() {
  return <div>Dashboard</div>;
}

 

* 라우팅 가드 예시

import { Navigate, Outlet, useMatches } from 'react-router';

export function AuthGuard() {
  const matches = useMatches();
  const requiresAuth = matches.some(
    m => m.route.meta?.requiresAuth
  );

  const isLoggedIn = false; // 예시

  if (requiresAuth && !isLoggedIn) {
    return <Navigate to="/login" replace />;
  }

  return <Outlet />;
}

 

다른 방법으로 loader 기반 가드 (권장되는 방식)

v6.4+ / v7에서 공식적으로 가장 깔끔한 패턴

export async function authLoader({ request }: LoaderFunctionArgs) {
  const isLoggedIn = false;

  if (!isLoggedIn) {
    throw redirect('/login');
  }

  return null;
}
{
  path: '/dashboard',
  element: <Dashboard />,
  loader: authLoader,
  meta: { requiresAuth: true },
}

 

'WEB개발 > REACT' 카테고리의 다른 글

pull to refresh  (0) 2026.01.12
react router (navigate)  (0) 2025.12.17
[hook] useCallback  (0) 2025.12.16
[hook] useEffect  (0) 2025.12.16
[hook] useQuery  (0) 2025.12.12