The root layout called `await cookies()` to read the locale, which marked the entire app as dynamic. In Next.js 16, dynamic pages have Router Cache staleTime=0, causing a fresh RSC server roundtrip on every navigation — the root cause of ~400ms tab switching delays. - Remove cookies() from root layout, making it static - Add LocaleSync client component to read locale cookie on the client - Add loading.tsx skeleton for dashboard routes as a loading fallback
20 lines
533 B
TypeScript
20 lines
533 B
TypeScript
"use client";
|
|
|
|
import { useEffect } from "react";
|
|
|
|
/**
|
|
* Reads the locale cookie on the client and updates <html lang>.
|
|
* This avoids calling cookies() in the root Server Component layout,
|
|
* which would mark the entire app as dynamic and disable the Router Cache.
|
|
*/
|
|
export function LocaleSync() {
|
|
useEffect(() => {
|
|
const match = document.cookie.match(/(?:^|;\s*)multica-locale=(\w+)/);
|
|
const locale = match?.[1];
|
|
if (locale === "zh") {
|
|
document.documentElement.lang = "zh";
|
|
}
|
|
}, []);
|
|
|
|
return null;
|
|
}
|