getStaticProps для заполнения верхнего / нижнего колонтитула страницы

Я создаю проект в Next. В настоящее время у меня есть настраиваемый компонент приложения, который монтирует компоненты верхнего и нижнего колонтитула.

Теперь я хочу заполнить содержимое верхнего / нижнего колонтитула из API (во время сборки, поскольку оно не будет меняться очень часто). Однако getStaticProps доступен только для страниц, но не для компонентов.

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


person cwj    schedule 26.05.2020    source источник


Ответы (1)


Предполагая, что App отображается на странице индекса внутри pages, вы просто передаете его в канализацию.

pages / index.js

import App from '../components/App'

const Index = ({data}) => {
  return(
    <div>
      <App data={data} />
    </div>
  )
}

export const getStaticProps = async () => {
  const res = await fetch('...')
  const data = await res.json()

  return { props: { data } } 
}

А затем в компоненте приложения вы обращаетесь к нему с помощью props.

компоненты / App.js

import Header from './Header'
import Footer from './Footer'

const App = (props) => { // I believe you can also use {data} directly instead of props
  return(
    <div>
      <Header data={props.data} />
      <Footer data={props.data} />
    </div>
  )
}

Затем вы делаете то же самое в компонентах Header и Footer.

components / Header.js

const Header = ({data}) => {
  return(
    <div>
      {data}
    </div>
  )
}
person Noodles    schedule 27.05.2020
comment
Спасибо за ваш ответ. Однако я не знаю, сработает ли это. Когда я имею в виду компонент приложения, я имею в виду пользовательский компонент приложения (_app.jsx). Здесь монтируются верхний / нижний колонтитулы, поскольку они используются на всех страницах сайта. Дело в том, что я не нашел способа для этого пользовательского компонента приложения получать из API во время сборки, потому что getStaticProps, похоже, не работает ни с чем, кроме страницы. то есть моя индексная страница монтируется приложением, а не наоборот. Извините, если я не совсем понял свой вопрос :( - person cwj; 28.05.2020
comment
Можно ли здесь использовать контекст реакции, чтобы избежать передачи реквизита? - person james emanon; 10.01.2021