Использование API next-intl в серверных компонентах в настоящее время приводит к динамической отрисовке на странице “не найдено” во время сборки.

Вопрос или проблема

Использование 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

Описание воспроизведения

Шаги для воспроизведения:

  1. Откройте воспроизведение
  2. Откройте терминал
  3. Запустите yarn build
  4. Смотрите ошибку в консоли

Ожидаемое поведение

Сборка должна завершиться успешно

Ответ или решение

Чтобы решить проблему с ошибкой, связанной с использованием APIs next-intl в Server Components, которая вызывает динамическое рендеринг во время сборки страницы not-found, вам необходимо воспользоваться API unstable_setRequestLocale, как указано в сообщении об ошибке.

Вот шаги, которые вы можете предпринять для устранения этой проблемы:

  1. Использование 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>
       );
    }
  2. Проверка layout.tsx: Убедитесь, что ваш файл layout.tsx генерирует правильные статические параметры. Если вы планируете поддерживать несколько локалей, убедитесь, что они все добавлены.

    Пример:

    // app/[locale]/layout.tsx
    export const generateStaticParams = () => {
       return ['en', 'ru', 'fr'].map((locale) => ({ locale }));
    };
  3. Правильное использование пути: Проверьте, корректно ли вы настроили свои маршруты. Убедитесь, что у вас есть как минимум два файла not-found: один для каждого локалей и один по умолчанию, как вы уже сделали.

  4. Запуск сборки: После внесения изменений попробуйте снова выполнить команду yarn build. Если вы правильно настроили компоненты и используете unstable_setRequestLocale, ошибка должна исчезнуть.

  5. Проверка документации: Так как API unstable_setRequestLocale является нестабильным, следите за обновлениями в документации next-intl и обновляйте код в будущем по мере появления стабильных решений.

Если после выполнения этих шагов ошибка продолжает возникать, проверьте консоль на наличие дополнительных сообщений об ошибках и убедитесь, что вся ваша кодовая база совместима с текущими версиями next и next-intl.

Оцените материал
Добавить комментарий

Капча загружается...