이 글의 성격은 무엇인가요?
질문 / 문제 해결
내용을 설명해주세요
npm run dev 로 실행하여서 샌드박스앱을 실행시키는 것은 되는데 nextjs 파일 기반 라우팅처럼 [dong].tsx 같이 생성했을때 router.gen.ts가 오토 제네레이션 되지 않고 있습니다. 아래와 같은 게 원인이라고 하는데요. 그래서 수동으로 gen해서 페이지가 잘 보이는 건 확인했는데 이 상황 문제가 맞나요?
Granite 동적 라우트 버그 정리
문제 원인
@granite-jsgranite-js/plugin-router와 @granite-js/react-native 간의 불일치
구분: plugin-router (빌드타임)
처리 방식: [param] 그대로 유지
결과: /result/[dongCode]
────────────────────────────────────────
구분: react-native (런타임)
처리 방식: [param] → :param 변환
결과: /result/:dongCode
빌드타임에 생성되는 router.gen.ts의 타입 정의와 런타임 라우트 이름이 달라서 네비게이션 실패.
해결책 (동적 라우트 추가 시)
- 파일 생성
pages/
└── result/
└── [dongCode].tsx ← 파일명은 [param] 형식
- createRoute는 :param 형식 사용
// pages/result/[dongCode].tsx (또는 src/pages/result/[dongCode].tsx)
export const Route = createRoute(‘/result/:dongCode’ as any, {
component: ResultScreen,
});
- router.gen.ts 수동 수정 (plugin-router 버그)
//
자동 생성된 것 (버그)
‘/result/[dongCode]’: (typeof _ResultDongCodeRoute)[‘_inputType’];
//
수동 수정 필요
‘/result/:dongCode’: (typeof _ResultDongCodeRoute)[‘_inputType’];
- navigate도 :param 형식
navigation.navigate(‘/result/:dongCode’, {
dongCode: ‘1168051000’,
destName: ‘강남’,
});
요약 공식
┌────────────────────┬──────────────────────────────┐
│ 항목 │ 형식 │
├────────────────────┼──────────────────────────────┤
│ 파일명 │ [param].tsx (Next.js 스타일) │
├────────────────────┼──────────────────────────────┤
│ createRoute 경로 │ :param (React Navigation 스타일) │
├────────────────────┼──────────────────────────────┤
│ router.gen.ts 타입 │ :param (수동 수정) │
├────────────────────┼──────────────────────────────┤
│ navigate 호출 │ :param │
└────────────────────┴──────────────────────────────┘