Next.js getInitialProps в компоненте глобального макета

Я создаю веб-сайт, используя next.js, и пытаюсь понять следующую «проблему». У меня есть статические данные (текст веб-сайта), которые необходимо получить из конечной точки API (Headless CMS).

Для отдельных страниц я использую getInitialProps для получения необходимых данных. Однако у меня также есть компонент нижнего колонтитула в моем основном макете. Как макет, так и компонент Footer не имеют решения getInitialProps, так как же с этим справиться "красивым" способом?

Некоторые решения, о которых я подумал:

  1. Я могу использовать componentDidMount для выполнения выборки на стороне клиента данных в компоненте нижнего колонтитула (но я действительно хочу, чтобы сервер извлекал / делал его статическим).
  2. Переместите нижний колонтитул на каждую страницу и сделайте getInitialProps доступным, добавив несколько HOC, чтобы предотвратить перезапись всего кода.
  3. Как я уже сказал, данные статичны, поэтому сделайте их доступными глобально через server.js или _document.js (хотя я не знаю, как это сделать).

Кто-нибудь, кто может указать мне правильное направление?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 431
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете поместить компоненты верхнего и нижнего колонтитула в _app.js.

Во-первых, в App.getInitialProps извлеките любые данные или выполните любые действия, которые вам нужны, чтобы произойти на стороне сервера. Затем эти данные, которые вы возвращаете, могут быть возвращены как реквизиты в сочетании с результатом Component.getInitialProps (getInitialProps вашего компонента страницы).

static async getInitialProps({ Component, ctx }) {
  let pageProps = {};

  // Make any initial calls we need to fetch data required for SSR
  const isAuthed = await ctx.reduxStore.dispatch(checkAuth());

  // Load the page getInitiaProps
  if (Component.getInitialProps) {
    pageProps = await Component.getInitialProps({ isAuthed, ...ctx });
  }

  return { pageProps: { ...pageProps, isAuthed } };
  // Or, if the async data is separate from your page props:
  // { pageProps, data: { isAuthed } };
}

В вашей функции рендеринга у вас есть доступ к this.props.pageProps (или this.props.data, если вы его разделили). Затем вы можете передать это в свой верхний и нижний колонтитулы.

<Header {...pageProps} />
  <main>
    <Component {...pageProps} />
  </main>
<Footer {...pageProps} />

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