Параметризованный динамический импорт с помощью next.js

Я пытаюсь интегрировать средства форматирования, созданные с помощью пакета globalize npm, в приложение на основе next.js. Средства форматирования хранятся в файлах для конкретных локалей. Идея состоит в том, чтобы динамически импортировать средства форматирования для конкретной локали на основе текущей локали. Текущая информация о локали доступна через интеграцию next-i18next в методе getInitialProps страницы, но поскольку средства форматирования содержат функции, импортирующие средства форматирования в getInitialProps и передающие их вместе с исходными реквизитами, не работает.

Каким может быть обходной путь для достижения желаемого поведения?

1 ответ

В итоге я использовал HOC с динамическим импортом:

const formatters = {};
LOCALES.forEach((locale) => {
  formatters[locale] = dynamic(() => {
    return import(`../../public/static/globalize/locales/${locale}/formatters-${locale}.js`);
  });
});

export default function withFormatter(Page) {
  const PageWithFormatter = (props) => {
    const lang = i18n.language || props.currentLanguage || 'en';

    const formatter = formatters[lang]('').type(lang);

    return (
      <GlobalizeContext.Provider value={{ formatter }}>
        <Page {...props} />
      </GlobalizeContext.Provider>
    );
  };

  PageWithFormatter.getInitialProps = async ({ req }) => {
    const currentLanguage = req ? req.language : '';

    return { currentLanguage };
  };

  return PageWithFormatter;
}
Другие вопросы по тегам