어떤 기능인가요?
지금은 <BrowserRouter> + <Routes> 구조라서, 레이아웃(ScreenLayout)이 화면마다 다른 prop(hasBottomNav)을 받으려면 레이아웃 라우트를 따로 두 번 선언해야 한다. 같은 레이아웃을 중복 선언하는 데다, 탭 화면과 신청 화면을 오갈 때 레이아웃이 통째로 다시 마운트된다.
라우트를 createBrowserRouter 객체 배열 한곳에서 정의하고, 레이아웃 라우트는 한 번만 선언한다. 화면별 옵션은 라우트의 handle에 두고, ScreenLayout은 지금처럼 prop(hasBottomNav)으로 받는 구조를 유지한다.
계획: docs/plans/router-object-routes.md (로컬 전용 문서, 저장소에는 안 올라감)
베이스 브랜치: main
📝 작업 상세 내용
제외: ScreenLayout 고정 프레임 해제(#30), 하단 탭 경로 정리(/event→/events 등, #27·#15), loader/lazy 도입
📁 참고 자료 (선택)
- 설치된
react-router-dom 7.18.3에서 createBrowserRouter, RouterProvider, useMatches, RouteObject, UIMatch 모두 사용 가능 (추가 설치 없음)
- 작업 순서: 이 작업을 먼저 머지하는 것을 권장
어떤 기능인가요?
지금은
<BrowserRouter>+<Routes>구조라서, 레이아웃(ScreenLayout)이 화면마다 다른 prop(hasBottomNav)을 받으려면 레이아웃 라우트를 따로 두 번 선언해야 한다. 같은 레이아웃을 중복 선언하는 데다, 탭 화면과 신청 화면을 오갈 때 레이아웃이 통째로 다시 마운트된다.라우트를
createBrowserRouter객체 배열 한곳에서 정의하고, 레이아웃 라우트는 한 번만 선언한다. 화면별 옵션은 라우트의handle에 두고,ScreenLayout은 지금처럼 prop(hasBottomNav)으로 받는 구조를 유지한다.계획:
docs/plans/router-object-routes.md(로컬 전용 문서, 저장소에는 안 올라감)베이스 브랜치:
main📝 작업 상세 내용
BrowserRouter를createBrowserRouter+RouterProvider로 전환 —src/app/router.tsx에 현재 라우트 구조를 그대로 객체 배열로 옮기고,App.tsx는 가운데 정렬 루트 레이아웃(Outlet)만 남김handle로 하단 탭 표시 여부를 정하고 레이아웃 라우트를 하나로 통합 —ScreenRouteHandle타입(satisfies로 선언 시점 검사), 타입 가드, 연결 컴포넌트src/app/ScreenLayoutRoute.tsxpath: "*") — 지금 하단 탭 "행사"(/event)·"게시판"(/board) 클릭 시 빈 화면 해결coding-style.md에 "라우팅" 절 추가 (라우트 추가 위치,handle지정 방법, 없는 경로 처리)제외:
ScreenLayout고정 프레임 해제(#30), 하단 탭 경로 정리(/event→/events등, #27·#15),loader/lazy도입📁 참고 자료 (선택)
react-router-dom7.18.3에서createBrowserRouter,RouterProvider,useMatches,RouteObject,UIMatch모두 사용 가능 (추가 설치 없음)App.tsx·ScreenLayout.tsx를 수정하므로 라우터 머지 후 시작하면 충돌 없음main으로 변경 후,/events라우트를router.tsx에 추가