Наследование компонента приложения Nextjs (pages/_app.js) в ReasonReact

Я пытаюсь реализовать React Context API в своем приложении Nextjs, используя ReasonReact, но меня улавливает способ вывода имен модулей компилятором bucklescript.

Чтобы сделать контекст доступным для всего дерева, мне нужно наследовать от компонента приложения Nextjs. Проблема в том, что Next по соглашению ищет pages/_app.js для наследования компонента приложения, но когда я использую _app.re для имени файла, bsb не создает модуль Reason с именем «Приложение».

На самом деле bsb выводит следующее сообщение и игнорирует файл:

IGNORED: file _app.re under pages is ignored because it can't be turned into a valid module name. The build system transforms a file name into a module name by upper-casing the first letter

Есть ли способ сказать Nextjs искать компонент приложения в другом месте? Или, возможно, способ настроить bsb только для этого одного файла?

Последнее кажется долгим, но я не хочу погружаться в javascript, если мне не нужно В самом деле.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
0
640
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Одним из возможных решений является добавление файла js с соответствующим именем, который реэкспортирует из скомпилированного модуля с именем, которое поддерживает BuckleScript:

// _app.js
export { default } from './next_app.bs.js';

Мне пришлось сделать это, чтобы некоторые функции работали с Гэтсби. См. этот пример.

Спасибо! Мы закончили тем, что использовали символическую ссылку для целей прототипирования, которая работает, но ваш подход чище для производственного использования. Мы столкнулись с необходимостью написать несколько довольно грубых привязок к слабо определенным параметрам для getInitialProps. Также необходимо запускать и await функции getInitialProps подстраниц, что будет довольно сложно. Мы планируем больше писать компонент App и другой специфичный для Nextjs код на Javascript, сохраняя Reason для самих компонентов и страниц (которые, кажется, лучше работают с ReasonReact).

Julian Suggate 27.02.2019 10:08

Другие вопросы по теме