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を使用しています。
エラーはスローされません。
アプリは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();
}
}
複製が提供されていないため、基本的にあなたを助けること/それが何に関連するかを言うことは不可能です。
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
今:(
最も参考になるコメント
私は同じ問題に直面しましたが、これが関連しているかどうかはわかりません。 ただし、この問題は不適切なインポートが原因で発生しました。
代わりの
import { Head } from 'next/document'
、それがあるべきimport Head from 'next/head'
誰もがインポートしようとした場合、Head
、およびないで個々のページ内の_document
で述べたように、ドキュメント。