Skip to content

Commit a0cf2c4

Browse files
yn1323claude
andcommitted
fix: LP ルートの hydration mismatch を解消
prerender 時は <LandingPage /> を返す一方、クライアント hydrate 時は Clerk の isLoaded 待ちで null を返していたため、React error #418 が発生していた。 Clerk のロード状態に関わらず未ログインは常に LP を返すようにし、 signed-in が確定した時だけダッシュボードへリダイレクトする。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 328d495 commit a0cf2c4

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/routes/index.tsx

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,10 @@ export const Route = createFileRoute("/")({
3030
function IndexPage() {
3131
const { isSignedIn, isLoaded } = useAuth();
3232

33-
// ビルド時 prerender 中は Clerk の初期化を待たず LP を描画する
34-
// (scripts/prerender.ts が addInitScript で window.__PRERENDER__ を注入する)
35-
if (typeof window !== "undefined" && (window as unknown as { __PRERENDER__?: boolean }).__PRERENDER__) {
36-
return <LandingPage />;
37-
}
38-
39-
if (!isLoaded) return null;
40-
41-
if (isSignedIn) {
33+
// Clerk のロード完了を待たず LP を返す。
34+
// - prerender 時も、初回 hydrate 時も、同じ <LandingPage /> を返すので hydration mismatch しない
35+
// - ログイン済み判定が取れた瞬間にだけ /dashboard へリダイレクト
36+
if (isLoaded && isSignedIn) {
4237
return <Navigate to="/dashboard" />;
4338
}
4439

0 commit comments

Comments
 (0)