TypeError: Cannot read property '_documentProps' of null
Это бросается в метод рендеринга Head
:
render() {
var {
styles,
ampPath,
inAmpMode,
assetPrefix,
hybridAmp,
canonicalBase,
__NEXT_DATA__,
dangerousAsPath,
headTags
} = this.context._documentProps;
Отлично работает в разработке, но при сборке и запуске версии сборки происходит сбой
Шаги по воспроизведению поведения, предоставьте фрагменты кода или репозиторий:
Я понимаю, что это может быть связано с моей настройкой. Я использую машинописный текст и nextjs.
Ошибка не возникает.
Приложение отлично работает в 9.0.4, но у меня есть зависимость, которая выдает предупреждение об уязвимости ... и не должно быть большим обновлением (я предполагал).
Проблема всегда проявляется в первом элементе внутри документа в pages / _document. В данном случае это «Голова», но если я удалю ее, она появится в «Основном». Каким-то образом этот контекст не заполняется .. только при сборке (работает в разработке)
Это getInitialProps моей страницы _document:
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();
}
}
В принципе невозможно помочь вам / сказать, к чему это относится, поскольку воспроизведение не предусмотрено.
Вы используете Аполлон?
Кажется, исправили это с помощью некоторого рефакторинга кода _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 .. По какой-то причине это кажется нетривиальным обновлением.
В любом случае спасибо за указатели.
Я знаю, что трудно помочь без репозитория воспроизведения, но иногда выдает всплывающее окно по другим причинам и не показывает себя в сценарии приветствия. У приложения, конечно же, есть другой код, который может отправлять нежелательные вещи ... что всегда возможно. стараюсь отлаживать и всегда предоставлять как можно больше информации.
Спасибо за помощь, сэр. ты классный 👍
Я столкнулся с той же проблемой, не уверен, связано ли это. Но проблема возникла из-за неправильного импорта.
Вместо 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
.
Для получения дополнительной информации → 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
, как указано в документации .