Next.js: TypeError:nullのプロパティ '_documentProps'を読み取れません

作成日 2019年12月06日  ·  10コメント  ·  ソース: vercel/next.js

バグレポート

バグを説明する

TypeError: Cannot read property '_documentProps' of null

これはHeadのrenderメソッドでスローされます:

render() {
    var {
      styles,
      ampPath,
      inAmpMode,
      assetPrefix,
      hybridAmp,
      canonicalBase,
      __NEXT_DATA__,
      dangerousAsPath,
      headTags
    } = this.context._documentProps;

開発では問題なく動作しますが、ビルドバージョンをビルドして実行するとクラッシュします

再現するには

動作を再現する手順は、コードスニペットまたはリポジトリを提供してください。

これは私の設定に関連している可能性があることを理解しています。 私はtypescriptとnextjsを使用しています。

予想される行動

エラーはスローされません。

システムインフォメーション

  • OS:macOS
  • ブラウザ(該当する場合)chrome(任意)
  • Next.jsのバージョン:9.1.4

追加のコンテキスト

アプリは9.0.4で正常に動作しますが、脆弱性の警告をスローする依存関係があります。大きな更新ではないはずです(私は推測しました)。

この問題は、pages / _documentのドキュメント内の最初の要素に常に表示されます。 この場合は「Head」ですが、Headを削除すると、「Main」に表示されます。 どういうわけか、このコンテキストは作成されていません..ビルド時のみ(開発中)

これは私の_documentページのgetInitialPropsです:

public static async getInitialProps(context: CustomDocumentContext) {
    const sheet = new ServerStyleSheet();
    const renderPage = context.renderPage;

    try {
      context.renderPage = () => {
        const enhancer = App => props => {
          return sheet.collectStyles(<App {...props} />);
        };

        return renderPage(enhancer);
      };

      const initialProps: any = await BaseDocument.getInitialProps(context);
      const { language, locale, localeData } = context.req;

      return {
        ...initialProps,
        language,
        locale,
        localeData,
        styles: (
          <>
            {initialProps.styles}
            {sheet.getStyleElement()}
          </>
        ),
      };
    } finally {
      // @ts-ignore
      sheet.seal();
    }
  }
please add a complete reproduction

最も参考になるコメント

私は同じ問題に直面しましたが、これが関連しているかどうかはわかりません。 ただし、この問題は不適切なインポートが原因で発生しました。

代わりのimport { Head } from 'next/document' 、それがあるべきimport Head from 'next/head'誰もがインポートしようとした場合、 Head 、およびないで個々のページ内の_documentで述べたように、ドキュメント

全てのコメント10件

複製が提供されていないため、基本的にあなたを助けること/それが何に関連するかを言うことは不可能です。

Apolloを使用していますか?

_document.tsxコードへのリファクタリングでこれを修正したようです:

const originalRenderPage = context.renderPage;
...
    try {
      context.renderPage = () =>
        originalRenderPage({
          enhanceApp: App => props => sheet.collectStyles(<App {...props} />),
        });

      const initialProps = await BaseDocument.getInitialProps(context);
...

例にあるものに近い。

9.0.4から9.1.4にアップデートしても、他の問題が発生します。これは、何らかの理由で重要なアップデートのようです。

とにかくポインタをありがとう。

いくつかの複製リポジトリなしで支援するのは難しいことを私は知っていますが、他の理由でポップアップを発行し、HelloWorldシナリオで表示されないことがあります。 もちろん、アプリには不要なものをディスパッチする可能性のある他のコードがあります。 常に可能な限り多くの情報をデバッグして提供しようとしています。

助けてくれてありがとう。 あなたは素晴らしいです👍

私は同じ問題に直面しましたが、これが関連しているかどうかはわかりません。 ただし、この問題は不適切なインポートが原因で発生しました。

代わりのimport { Head } from 'next/document' 、それがあるべきimport Head from 'next/head'誰もがインポートしようとした場合、 Head 、およびないで個々のページ内の_documentで述べたように、ドキュメント

@ Shub1427あなたは美しさです、ありがとう!

@ Shub1427❤️

うわー、これは私が立ち往生してほぼ2日後に私を救った。 これは間違いなくより適切に文書化されるべきだと思います。

import Head from 'next/head'を使用している人は、すべてのタグがサーバーではなくクライアントでのみレンダリングされるように見えることに注意してください

このエラーが発生します
Unhandled error during request: TypeError: Cannot destructure property 'assetPrefix' of 'this.context._documentProps' as it is undefined.
デプロイ時の私の_document.jsにありますが、ローカルでは正常に機能します。

@sibasishm私はそのエラーに直面し、解決策はthis.context代わりにthis.context._documentProps this.contextを実行することthis.context._documentProps

詳細については→ https://github.com/vercel/next.js/discussions/16162

しかし、私は今、別のエラーを取得していますType error: Property 'files' does not exist on type 'DocumentProps'.私がやっているようconst { assetPrefix, files } = this.context今:(

このページは役に立ちましたか?
0 / 5 - 0 評価