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: λ§₯OS
  • λΈŒλΌμš°μ €(ν•΄λ‹Ήλ˜λŠ” 경우) 크둬(λͺ¨λ‘)
  • Next.js 버전: 9.1.4

μΆ”κ°€ μ»¨ν…μŠ€νŠΈ

앱은 9.0.4μ—μ„œ 잘 μž‘λ™ν•˜μ§€λ§Œ μ·¨μ•½μ„± κ²½κ³ λ₯Ό ν‘œμ‹œν•˜λŠ” 쒅속성이 μžˆμŠ΅λ‹ˆλ‹€. 큰 μ—…λ°μ΄νŠΈκ°€λ˜μ–΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€.

λ¬Έμ œλŠ” 항상 νŽ˜μ΄μ§€/_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 λŒ“κΈ€

μž¬μƒμ‚°μ΄ μ œκ³΅λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— κ·€ν•˜λ₯Ό λ•λŠ” / 그것이 무엇과 κ΄€λ ¨λœ 것인지 λ§ν•˜λŠ” 것은 기본적으둜 λΆˆκ°€λŠ₯ν•©λ‹ˆλ‹€.

당신은 μ•„ν΄λ‘œλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

_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둜 μ—…λ°μ΄νŠΈν•˜λŠ” λ™μ•ˆ λ‹€λ₯Έ λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€..이것은 μ–΄λ–€ 이유둜 μ‚¬μ†Œν•˜μ§€ μ•Šμ€ μ—…λ°μ΄νŠΈμΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  포인터 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

μž¬μƒμ‚° 리포지토리 μ—†μ΄λŠ” 돕기가 μ–΄λ ΅λ‹€λŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ λ•Œλ•Œλ‘œ λ‹€λ₯Έ 이유둜 νŒμ—…μ΄ ν‘œμ‹œλ˜κ³  Hello World μ‹œλ‚˜λ¦¬μ˜€μ—μ„œ μžμ‹ μ„ ν‘œμ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ¬Όλ‘  μ•±μ—λŠ” μ›μΉ˜ μ•ŠλŠ” 것을 λ°œμ†‘ν•  수 μžˆλŠ” λ‹€λ₯Έ μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 항상 κ°€λŠ₯ν•©λ‹ˆλ‹€. 항상 κ°€λŠ₯ν•œ ν•œ λ§Žμ€ 정보λ₯Ό λ””λ²„κ·Έν•˜κ³  μ œκ³΅ν•˜λ €κ³  λ…Έλ ₯ν•©λ‹ˆλ‹€.

λͺ¨λ“  도움을 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€ μ„ μƒλ‹˜. 당신은 ꡉμž₯ν•˜λ‹€ πŸ‘

λ‚˜λŠ” 이것이 관련이 μžˆλŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•Šμ€ λ™μΌν•œ λ¬Έμ œμ— μ§λ©΄ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ λ¬Έμ œλŠ” λΆ€μ μ ˆν•œ μˆ˜μž…μœΌλ‘œ 인해 λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

λŒ€μ‹  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 Type error: Property 'files' does not exist on type 'DocumentProps'. 또 λ‹€λ₯Έ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰