web-dev-qa-db-ja.com

_app.jsをオーバーライドする場合、getInitialPropsは何に使用されますか?

これは本当に何をしますか?

pageProps = await Component.getInitialProps(ctx)

「pageProps」のように見えますこれは単なる空のオブジェクトです

import App, {Container} from 'next/app'
import React from 'react'

export default class MyApp extends App {
  static async getInitialProps ({ Component, router, ctx }) {
    let pageProps = {}

    if (Component.getInitialProps) {
      pageProps = await Component.getInitialProps(ctx)
    }

    return {pageProps}
  }

  render () {
    const {Component, pageProps} = this.props
    return <Container>
      <Component {...pageProps} />
    </Container>
  }
}
7
crapthings

getInitialPropsを呼び出すと、サーバー上でレンダリングされたときにコンポーネントに持たせたい小道具を取得するために呼び出すことができます。

たとえば、現在の天気を表示する必要があり、SEOの目的でGoogleにその情報でページのインデックスを作成してもらいたい場合があります。

これを実現するには、次のようにします。

import React from 'react' import 'isomorphic-fetch' const HomePage = (props) => ( <div> Weather today is: {weather} </div> ) HomePage.getInitialProps = async ({ req }) => { const res = await fetch('https://my.weather.api/london/today') const json = await res.json() return { weather: json.today } } export default HomePage

pageProps = await Component.getInitialProps(ctx)はその初期関数を呼び出し、HomePageコンポーネントがweatherAPIへの呼び出しの結果として生じる初期小道具でインスタンス化されるようにします。

6
stef