NextJSを使用して静的サイトを構築するときは、getInitialProps
メソッドがビルドステップ中にのみ起動し、クライアント上ではなくなります。
ビルドステップでは、NEXTJSは getInitialPropsメソッド を実行します。各コンポーネントのレンダリングされたHTMLを使用してページの静的HTMLを生成するために使用されます。クライアントでは、NextJSはまた、コンポーネントに必要な小道具を返すためにページコンポーネントがレンダリングされる前にこのメソッドを実行します。したがって、大規模な要求は、これがブロック要求であるため、クライアントの最初のペイントを遅らせる可能性があります。
// example usage of API call in getInitialProps
import fetch from 'isomorphic-unfetch'
function Page({ stars }) {
return <div>Next stars: {stars}</div>
}
Page.getInitialProps = async ({ req }) => {
const res = await fetch('https://api.github.com/repos/zeit/next.js')
const json = await res.json()
return { stars: json.stargazers_count }
}
export default Page
_
静的なHTMLを入力するためにBuildステップ中に返されたデータを使用するために、ブロッキング要求を回避するために、ブロッキング要求を回避するために、スローAPI要求をcomponentDidMount
に移動したくない。ビルド後に動的または更新されること。
getInitialProps
runのみを作ることができる方法はありますnext export
ビルドし、NOTクライアントがページをロードしていますか?
この良い練習ですか?
@dkmsによる答えを使ってください。これは静的サイトビルドの最良のソリューションです。
三 2つの方法です ページコンポーネントのロード上でgetInitialProps
のコードのコードが実行されないようにすることがわかった方法は1つあります。
next/link
なしで通常のアンカータグをそのページに使用します。getInitialProps
next/link
コンポーネントからページがリンクされている場合にのみ実行されます。代わりに通常のJSX Anchor <a href="/my-page">click me</a>
が使用されている場合は、コンポーネントのgetInitialProps
がではなくの呼び出されます。ダイレクトページNextJS Static Site PagesへのロードはgetInitialProps
を呼び出しません。
next/link
コンポーネントの代わりに標準アンカーを使用すると、フルページの更新が発生します。
これは貧弱な解決策です 私はフィーチャリクエストを送信 。
req
引数のcontext
を使用してgetInitialProps
のAPI呼び出しを行います。私は@evgenifotiaが何を伝えたいのかを信じていますが、req
はエクスポートされたサイトでは未定義です。
// example usage of API call in getInitialProps import fetch from 'isomorphic-unfetch' function Page({ stars }) { return <div>Next stars: {stars}</div> } Page.getInitialProps = async (ctx) => { const { req } = ctx // context object: { req, res, pathname, query, asPath } if (req) { // will only run during the build (next export) const res = await fetch('https://api.github.com/repos/zeit/next.js') const json = await res.json() return { stars: json.stargazers_count } } return {} } export default Page
getInitialProps
の詳細については、 ドキュメント を参照してください。一例では、req
がサーバー上でのみ定義されることが予想される(またはエクスポートビルド中)ということを確認します。
const userAgent = req ? req.headers['user-agent'] : navigator.userAgent`
この2番目のオプションは、いくつかのシナリオで機能することがありますが、getInitialProps
から空の結果を返す場所は、コンポーネントのthis.props
に影響します。
注:
浅いルーティングは答えではありません。 ドキュメントに従って (「ノート」の下にある」を参照)。
浅いルーティングは、同じページのURLの変更に対してのみ機能します。