Вопрос или проблема
Использование API next-intl в серверных компонентах в настоящее время приводит к динамической отрисовке на странице “не найдено” во время сборки.
Описание
Когда я запускаю yarn build, я получаю эту ошибку:
Ошибка: Использование API next-intl в серверных компонентах в настоящее время приводит к динамическому рендерингу.
Это ограничение в конечном итоге будет снято, но в качестве временного решения вы можете использовать API `unstable_setRequestLocale`, чтобы включить статический рендеринг.
Экспорт завершился с ошибками по следующим путям:
/_not-found/page: /_not-found
Как предлагает документация, у меня есть 2 файла not-found:
app/[locale]/not-found.tsx
app/not-found.tsx
Я думаю, ошибка связана с этим:
// app/[locale]/layout.tsx
export const generateStaticParams = () => {
return ["en"].map((locale: string) => ({ locale }));
};
URL для воспроизведения
https://codesandbox.io/p/github/tiavina-mika/next-intl-bug-repro-app-router
Описание воспроизведения
Шаги для воспроизведения:
- Откройте воспроизведение
- Откройте терминал
- Запустите
yarn build
- Смотрите ошибку в консоли
Ожидаемое поведение
Сборка должна завершиться успешно
Ответ или решение
Чтобы решить проблему с ошибкой, связанной с использованием APIs next-intl в Server Components, которая вызывает динамическое рендеринг во время сборки страницы not-found, вам необходимо воспользоваться API unstable_setRequestLocale
, как указано в сообщении об ошибке.
Вот шаги, которые вы можете предпринять для устранения этой проблемы:
-
Использование API
unstable_setRequestLocale
: Вам нужно модифицировать компонентnot-found.tsx
, добавив в него вызов данного API. Это позволит указать локаль во время рендеринга.Пример использования:
// app/[locale]/not-found.tsx import { unstable_setRequestLocale } from 'next-intl'; export default function NotFound() { // Устанавливаем локаль unstable_setRequestLocale('en'); return ( <div> <h1>Страница не найдена</h1> </div> ); }
-
Проверка
layout.tsx
: Убедитесь, что ваш файлlayout.tsx
генерирует правильные статические параметры. Если вы планируете поддерживать несколько локалей, убедитесь, что они все добавлены.Пример:
// app/[locale]/layout.tsx export const generateStaticParams = () => { return ['en', 'ru', 'fr'].map((locale) => ({ locale })); };
-
Правильное использование пути: Проверьте, корректно ли вы настроили свои маршруты. Убедитесь, что у вас есть как минимум два файла not-found: один для каждого локалей и один по умолчанию, как вы уже сделали.
-
Запуск сборки: После внесения изменений попробуйте снова выполнить команду
yarn build
. Если вы правильно настроили компоненты и используетеunstable_setRequestLocale
, ошибка должна исчезнуть. - Проверка документации: Так как API
unstable_setRequestLocale
является нестабильным, следите за обновлениями в документации next-intl и обновляйте код в будущем по мере появления стабильных решений.
Если после выполнения этих шагов ошибка продолжает возникать, проверьте консоль на наличие дополнительных сообщений об ошибках и убедитесь, что вся ваша кодовая база совместима с текущими версиями next и next-intl.