Skip to content

Latest commit

Β 

History

History
342 lines (225 loc) Β· 11.4 KB

options-lifecycle.md

File metadata and controls

342 lines (225 loc) Β· 11.4 KB

μ˜΅μ…˜: 생λͺ…μ£ΌκΈ° {#options-lifecycle}

:::info μ°Έκ³  생λͺ…μ£ΌκΈ° ν›…μ˜ μ—¬λŸ¬ μ‚¬μš©λ²•μ— λŒ€ν•΄μ„œλŠ” κ°€μ΄λ“œ - 생λͺ…μ£ΌκΈ° 훅을 μ°Έκ³ ν•˜μ‹­μ‹œμ˜€. :::

beforeCreate {#beforecreate}

μΈμŠ€ν„΄μŠ€κ°€ μ΄ˆκΈ°ν™”λœ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      beforeCreate?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    μΈμŠ€ν„΄μŠ€κ°€ μ΄ˆκΈ°ν™” 되고 propsκ°€ 해결될 λ•Œ μ¦‰μ‹œ ν˜ΈμΆœλ©λ‹ˆλ‹€.

    그런 λ‹€μŒ propsλŠ” λ°˜μ‘ν˜• μ†μ„±μœΌλ‘œ μ •μ˜λ˜κ³  data() λ˜λŠ” computed와 같은 μƒνƒœκ°€ μ„€μ •λ©λ‹ˆλ‹€.

    Composition API의 setup() 훅은 beforeCreate()쑰차도 λͺ¨λ“  Options API ν›…(hook)보닀 λ¨Όμ € ν˜ΈμΆœλœλ‹€λŠ” 점에 μ£Όμ˜ν•˜μ„Έμš”.

created {#created}

μΈμŠ€ν„΄μŠ€κ°€ λͺ¨λ“  μƒνƒœ κ΄€λ ¨ μ˜΅μ…˜ 처리λ₯Ό μ™„λ£Œν•œ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      created?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    λ°˜μ‘ν˜• 데이터, κ³„μ‚°λœ 속성, λ©”μ„œλ“œ 및 κ°μ‹œμžκ°€ μ„€μ •λœ ν›„, 이 훅이 호좜되면 λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ§ˆμš΄νŒ… 단계가 μ‹œμž‘λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ, $el 속성을 아직 μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

beforeMount {#beforemount}

μ»΄ν¬λ„ŒνŠΈκ°€ 마운트되기 직전 ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      beforeMount?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    λ°˜μ‘ν˜• μƒνƒœ 섀정이 μ™„λ£Œλ˜λ©΄ 이 훅이 ν˜ΈμΆœλ˜μ§€λ§Œ, 아직 DOM λ…Έλ“œκ°€ μƒμ„±λ˜μ§€λŠ” μ•Šμ•˜μœΌλ©°, 첫 DOM λ Œλ” μ΄νŽ™νŠΈλ₯Ό μ‹€ν–‰ν•˜λ €κ³  ν•©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

mounted {#mounted}

μ»΄ν¬λ„ŒνŠΈκ°€ 마운트된 ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      mounted?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    μ»΄ν¬λ„ŒνŠΈκ°€ 마운트된 κ²ƒμœΌλ‘œ κ°„μ£Όλ˜λŠ” 경우:

    • λ™κΈ°μ μœΌλ‘œ μ„ μ–Έλœ λͺ¨λ“  μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°€ 마운트됨(비동기 μ»΄ν¬λ„ŒνŠΈ λ˜λŠ” <Suspense> 트리 λ‚΄λΆ€ μ»΄ν¬λ„ŒνŠΈλŠ” ν¬ν•¨ν•˜μ§€ μ•ŠμŒ).

    • 자체 DOM νŠΈλ¦¬κ°€ μƒμ„±λ˜μ–΄ μƒμœ„ μ»¨ν…Œμ΄λ„ˆμ— μ‚½μž…λœ 경우. μ•±μ˜ 루트 μ»¨ν…Œμ΄λ„ˆκ°€ λ¬Έμ„œ 내에 있고, μ»΄ν¬λ„ŒνŠΈμ˜ DOM νŠΈλ¦¬λ„ λ¬Έμ„œ λ‚΄ μžˆλŠ” κ²½μš°μ—λ§Œ 보μž₯됨.

    이 훅은 일반적으둜 μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ”λ§λœ DOM에 μ ‘κ·Όν•΄μ•Ό ν•˜λŠ” μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό μ‹€ν–‰ν•˜κ±°λ‚˜, μ„œλ²„μ—μ„œ λ Œλ”λ§λœ μ•±μ˜ DOM κ΄€λ ¨ μ½”λ“œλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—μ„œλ§Œ μ‘°μž‘ν•˜λ„λ‘ μ œν•œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

beforeUpdate {#beforeupdate}

λ°˜μ‘ν˜• μƒνƒœ 변경에 μ˜ν•œ μ»΄ν¬λ„ŒνŠΈ DOM 트리 μ—…λ°μ΄νŠΈ 직전 ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      beforeUpdate?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    이 훅은 Vueκ°€ DOM을 μ—…λ°μ΄νŠΈν•˜κΈ° μ „, DOM μƒνƒœμ— μ ‘κ·Όν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이 ν›… λ‚΄λΆ€μ—μ„œ μ»΄ν¬λ„ŒνŠΈ μƒνƒœλ₯Ό μˆ˜μ •ν•˜λŠ” 것도 μ•ˆμ „ν•©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

updated {#updated}

λ°˜μ‘ν˜• μƒνƒœ 변경에 μ˜ν•œ μ»΄ν¬λ„ŒνŠΈ DOM 트리 μ—…λ°μ΄νŠΈ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      updated?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    λΆ€λͺ¨ μ»΄ν¬λ„ŒνŠΈμ˜ updated 훅은 μžμ‹ μ»΄ν¬λ„ŒνŠΈμ˜ updated ν›… 이후에 ν˜ΈμΆœλ©λ‹ˆλ‹€.

    이 훅은 λ°˜μ‘ν˜• μƒνƒœ 변경에 μ˜ν•œ μ»΄ν¬λ„ŒνŠΈ DOM 트리 μ—…λ°μ΄νŠΈ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€. ν•œ μ½”λ“œλΈ”λŸ­ λ‚΄μ—μ„œ νŠΉμ • μƒνƒœ λ³€κ²½ ν›„, μ΄μ–΄μ„œ μ—…λ°μ΄νŠΈλœ DOM에 μ ‘κ·Όν•΄μ•Ό ν•˜λŠ” 둜직의 경우, nextTick()을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    :::warning updated ν›…μ—μ„œ μ»΄ν¬λ„ŒνŠΈ μƒνƒœλ₯Ό λ³€κ²½ν•˜λ©΄, λ¬΄ν•œ μ—…λ°μ΄νŠΈ 루프가 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€. :::

beforeUnmount {#beforeunmount}

μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€κ°€ 마운트 ν•΄μ œλ˜κΈ° 직전 ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      beforeUnmount?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    이 훅이 호좜된 κ²½μš°μ—λ„ μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€λŠ” μ—¬μ „νžˆ μ˜¨μ „νžˆ μž‘λ™ν•©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

unmounted {#unmounted}

μ»΄ν¬λ„ŒνŠΈκ°€ 마운트 ν•΄μ œλœ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      unmounted?(this: ComponentPublicInstance): void
    }
  • μ„ΈλΆ€ 사항:

    μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλœ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜λŠ” 경우:

    • λͺ¨λ“  μžμ‹ μ»΄ν¬λ„ŒνŠΈκ°€ μ–Έλ§ˆμš΄νŠΈλ¨.

    • κ΄€λ ¨λœ λͺ¨λ“  λ°˜μ‘ν˜• μ΄νŽ™νŠΈ(setup() λ™μ•ˆ μƒμ„±λœ λ Œλ”λ§ μ΄νŽ™νŠΈ 및 κ³„μ‚°λœ 속성/κ°μ‹œμž)κ°€ 쀑지됨.

    이 훅을 μ‚¬μš©ν•˜μ—¬ 타이머, DOM 이벀트 λ¦¬μŠ€λ„ˆ λ˜λŠ” μ„œλ²„ μ—°κ²°κ³Ό 같이 μˆ˜λ™μœΌλ‘œ μƒμ„±λœ μ‚¬μ΄λ“œ μ΄νŽ™νŠΈλ₯Ό μ •λ¦¬ν•©λ‹ˆλ‹€.

    이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

errorCaptured {#errorcaptured}

μžμ‹ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ „νŒŒλœ μ—λŸ¬κ°€ μΊ‘μ³λ˜μ—ˆμ„ λ•Œ ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      errorCaptured?(
        this: ComponentPublicInstance,
        err: unknown,
        instance: ComponentPublicInstance | null,
        info: string
      ): boolean | void
    }
  • μ„ΈλΆ€ 사항:

    λ‹€μŒκ³Ό 같은 좜처의 μ—λŸ¬λ₯Ό μΊ‘μ²˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

    • μ»΄ν¬λ„ŒνŠΈ λ Œλ”
    • 이벀트 ν•Έλ“€λŸ¬
    • 생λͺ…μ£ΌκΈ° ν›…
    • setup() ν•¨μˆ˜
    • κ°μ‹œμž
    • μ»€μŠ€ν…€ λ””λ ‰ν‹°λΈŒ ν›…
    • νŠΈλžœμ§€μ…˜ ν›…

    훅은 'μ—λŸ¬', 'μ—λŸ¬λ₯Ό νŠΈλ¦¬κ±°ν•œ μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€', 'μ—λŸ¬ μ†ŒμŠ€ μœ ν˜•μ„ μ§€μ •ν•˜λŠ” 정보 λ¬Έμžμ—΄' μ„Έ 개의 인자λ₯Ό λ°›μŠ΅λ‹ˆλ‹€.

    :::tip ν”„λ‘œλ•μ…˜μ—μ„œλŠ” 3번째 인수(info)κ°€ 전체 정보 λ¬Έμžμ—΄ λŒ€μ‹  μΆ•μ•½λœ μ½”λ“œλ‘œ μ œκ³΅λ©λ‹ˆλ‹€. μ½”λ“œμ™€ λ¬Έμžμ—΄ 맀핑은 ν”„λ‘œλ•μ…˜ 였λ₯˜ μ½”λ“œ μ°Έμ‘°μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. :::

    errorCaptured ν›…μ—μ„œ μ»΄ν¬λ„ŒνŠΈ μƒνƒœλ₯Ό μˆ˜μ •ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ μ—λŸ¬ μƒνƒœλ₯Ό ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μ—λŸ¬κ°€ λ‚œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ—λŸ¬ μƒνƒœλ₯Ό λ Œλ”λ§ν•΄μ„œλŠ” μ•ˆλ©λ‹ˆλ‹€. 그렇지 μ•ŠμœΌλ©΄ μ»΄ν¬λ„ŒνŠΈκ°€ λ¬΄ν•œ λ Œλ”λ§ 루프에 λΉ μ§‘λ‹ˆλ‹€.

    훅은 falseλ₯Ό λ°˜ν™˜ν•˜μ—¬ μ—λŸ¬κ°€ 더 이상 μ „νŒŒλ˜μ§€ μ•Šλ„λ‘ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•„λž˜μ˜ μ—λŸ¬ μ „νŒŒ μ„ΈλΆ€ 사항을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

    μ—λŸ¬ μ „νŒŒ κ·œμΉ™

    • 기본적으둜 λͺ¨λ“  μ—λŸ¬λŠ” λ‹¨κ³„μ μœΌλ‘œ μ „νŒŒλ˜λ©°, app.config.errorHandlerκ°€ μ •μ˜λœ 경우, μ΅œμ’…μ μœΌλ‘œ 이곳으둜 μ „νŒŒλ˜λ―€λ‘œ ν•œ κ³³μ—μ„œ μ„œλΉ„μŠ€ 뢄석 및 보고 μž‘μ—…μ„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

    • μ»΄ν¬λ„ŒνŠΈμ˜ 상속 체인 λ˜λŠ” λΆ€λͺ¨ 체인에 μ—¬λŸ¬ 개의 errorCaptured 후크가 μ‘΄μž¬ν•˜λŠ” 경우, λͺ¨λ“  ν›„ν¬λŠ” λ™μΌν•œ 였λ₯˜μ— λŒ€ν•΄ μ•„λž˜μ—μ„œ μœ„λ‘œ μˆœμ„œλŒ€λ‘œ ν˜ΈμΆœλ©λ‹ˆλ‹€. μ΄λŠ” λ„€μ΄ν‹°λΈŒ DOM 이벀트의 버블링 λ©”μ»€λ‹ˆμ¦˜κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€.

    • errorCaptured ν›… μžμ²΄μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜λ©΄, 이 μ—λŸ¬μ™€ μ›λž˜ 캑처된 μ—λŸ¬κ°€ λͺ¨λ‘ app.config.errorHandler둜 μ „μ†‘λ©λ‹ˆλ‹€.

    • errorCaptured ν›…μ—μ„œ falseλ₯Ό λ°˜ν™˜ν•˜λ©΄ 더 이상 μ—λŸ¬κ°€ μ „νŒŒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 본질적으둜 "이 μ—λŸ¬λŠ” μ²˜λ¦¬λ˜μ—ˆμœΌλ―€λ‘œ λ¬΄μ‹œλ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€."λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ”°λΌμ„œ 이후 λ‹¨κ³„μ μœΌλ‘œ μ „νŒŒλ˜μ–΄μ•Ό ν•  errorCaptured ν›… λ˜λŠ” app.config.errorHandler에 이 μ—λŸ¬λ‘œ μΈν•œ 호좜 λ™μž‘μ€ μ—†μŠ΅λ‹ˆλ‹€.

renderTracked {#rendertracked}

μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ” μ΄νŽ™νŠΈμ— μ˜ν•΄ λ°˜μ‘ν˜• μ˜μ‘΄μ„±μ΄ 좔적됐을 λ•Œ, ν˜ΈμΆœλ©λ‹ˆλ‹€.

이 훅은 개발 λͺ¨λ“œ μ „μš©μ΄λ©° μ„œλ²„ μΈ‘ λ Œλ”λ§ μ€‘μ—λŠ” ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      renderTracked?(this: ComponentPublicInstance, e: DebuggerEvent): void
    }
    
    type DebuggerEvent = {
      effect: ReactiveEffect
      target: object
      type: TrackOpTypes /* 'get' | 'has' | 'iterate' */
      key: any
    }
  • μ°Έκ³ : κ°€μ΄λ“œ - λ°˜μ‘ν˜• 심화

renderTriggered {#rendertriggered}

μ»΄ν¬λ„ŒνŠΈμ˜ λ Œλ” μ΄νŽ™νŠΈκ°€ λ°˜μ‘ν˜• μ˜μ‘΄μ„±μ— μ˜ν•΄ λ‹€μ‹œ μ‹€ν–‰λ˜λ„λ‘ 트리거된 경우, ν˜ΈμΆœλ©λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      renderTriggered?(this: ComponentPublicInstance, e: DebuggerEvent): void
    }
    
    type DebuggerEvent = {
      effect: ReactiveEffect
      target: object
      type: TriggerOpTypes /* 'set' | 'add' | 'delete' | 'clear' */
      key: any
      newValue?: any
      oldValue?: any
      oldTarget?: Map<any, any> | Set<any>
    }
  • μ°Έκ³ : κ°€μ΄λ“œ - λ°˜μ‘ν˜• 심화

activated {#activated}

<KeepAlive>둜 μΊμ‹œλœ μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€κ°€ DOM 트리의 μΌλΆ€λ‘œ μ‚½μž…λœ ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

deactivated {#deactivated}

<KeepAlive>둜 μΊμ‹œλœ μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€κ°€ DOM νŠΈλ¦¬μ—μ„œ 제거된 ν›„ ν˜ΈμΆœλ©λ‹ˆλ‹€.

이 훅은 μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ 쀑에 ν˜ΈμΆœλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

serverPrefetch {#serverprefetch}

μ»΄ν¬λ„ŒνŠΈ μΈμŠ€ν„΄μŠ€κ°€ μ„œλ²„μ—μ„œ λ Œλ”λ§ 되기 전에 μ™„λ£Œ(resolve)λ˜μ–΄μ•Ό ν•˜λŠ” 비동기 ν•¨μˆ˜μž…λ‹ˆλ‹€.

  • νƒ€μž…:

    interface ComponentOptions {
      serverPrefetch?(this: ComponentPublicInstance): Promise<any>
    }
  • μ„ΈλΆ€ 사항:

    훅이 Promiseλ₯Ό λ°˜ν™˜ν•˜λ©΄, μ„œλ²„ λ Œλ”λŸ¬λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ Œλ”λ§ν•˜κΈ° μ „ Promiseκ°€ 해결될 λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦½λ‹ˆλ‹€.

    이 훅은 SSR(μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§) μ€‘μ—λ§Œ ν˜ΈμΆœλ˜λ―€λ‘œ, μ„œλ²„ μ „μš© 데이터 κ°€μ Έμ˜€κΈ°λ₯Ό μ‹€ν–‰ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 예제

    export default {
      data() {
        return {
          data: null
        }
      },
      async serverPrefetch() {
        // μ„œλ²„μ—μ„œ 미리 데이터λ₯Ό κ°€μ Έμ˜€λŠ” 것은
        // ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ 데이터λ₯Ό μš”μ²­ν•˜λŠ” 것보닀 빠름.
        // 졜초 데이터 μš”μ²­ 결과둜 μ»΄ν¬λ„ŒνŠΈμ˜ 일뢀가 λ Œλ”λ§ 됨.
        this.data = await fetchOnServer(/* ... */)
      },
      async mounted() {
        if (!this.data) {
          // 마운트 μ‹œ 데이터가 null일 경우,
          // μ»΄ν¬λ„ŒνŠΈκ°€ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ λ™μ μœΌλ‘œ λ Œλ”λ§λ˜λ„λ‘
          // ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ κ°€μ Έμ˜€κΈ°λ₯Ό μ‹€ν–‰ν•΄μ•Ό 함.
          this.data = await fetchOnClient(/* ... */)
        }
      }
    }
  • μ°Έκ³ : κ°€μ΄λ“œ - μ„œλ²„ μ‚¬μ΄λ“œ λ Œλ”λ§ (SSR)