Skip to content
On this page

옵션: 기타

name

컴포넌트의 표시 이름을 명시적으로 선언합니다.

  • 타입

    ts
    interface ComponentOptions {
      name?: string
    }
  • 세부 정보

    컴포넌트의 이름은 다음과 같은 용도로 사용됩니다:

    • 컴포넌트 자신의 템플릿에서 재귀적으로 자기 자신을 참조할 때
    • Vue DevTools의 컴포넌트 검사 트리에서 표시할 때
    • 경고 컴포넌트 추적에서 표시할 때

    싱글 파일 컴포넌트(SFC)를 사용할 때, 컴포넌트는 이미 파일 이름에서 자신의 이름을 추론합니다. 예를 들어, MyComponent.vue라는 파일은 "MyComponent"라는 표시 이름을 자동으로 갖게 됩니다.

    또 다른 경우로, 컴포넌트가 app.component로 전역 등록될 때, 전역 ID가 자동으로 이름으로 설정됩니다.

    name 옵션을 사용하면 추론된 이름을 덮어쓸 수 있으며, 이름을 추론할 수 없는 경우(예: 빌드 도구를 사용하지 않거나 인라인된 비-SFC 컴포넌트 등) 명시적으로 이름을 지정할 수 있습니다.

    name이 명시적으로 필요한 한 가지 경우가 있습니다: <KeepAlive>include / exclude props를 통해 캐시 가능한 컴포넌트와 매칭할 때입니다.

    TIP

    3.2.34 버전부터 <script setup>을 사용하는 싱글 파일 컴포넌트는 파일 이름을 기반으로 name 옵션을 자동으로 추론하므로, <KeepAlive>와 함께 사용할 때도 이름을 수동으로 선언할 필요가 없습니다.

inheritAttrs

기본 컴포넌트 속성 전달(fallthrough) 동작을 활성화할지 제어합니다.

  • 타입

    ts
    interface ComponentOptions {
      inheritAttrs?: boolean // 기본값: true
    }
  • 세부 정보

    기본적으로, props로 인식되지 않는 상위 스코프의 속성 바인딩은 "전달(fallthrough)"됩니다. 즉, 단일 루트 컴포넌트가 있을 때 이러한 바인딩은 자식 컴포넌트의 루트 엘리먼트에 일반 HTML 속성으로 적용됩니다. 타겟 엘리먼트나 다른 컴포넌트를 감싸는 컴포넌트를 작성할 때, 이러한 동작이 항상 원하는 것은 아닐 수 있습니다. inheritAttrsfalse로 설정하면 이 기본 동작을 비활성화할 수 있습니다. 이 속성들은 $attrs 인스턴스 프로퍼티를 통해 접근할 수 있으며, v-bind를 사용해 루트가 아닌 엘리먼트에 명시적으로 바인딩할 수 있습니다.

  • 예시

    vue
    <script>
    export default {
      inheritAttrs: false,
      props: ['label', 'value'],
      emits: ['input']
    }
    </script>
    
    <template>
      <label>
        {{ label }}
        <input
          v-bind="$attrs"
          v-bind:value="value"
          v-on:input="$emit('input', $event.target.value)"
        />
      </label>
    </template>

    <script setup>을 사용하는 컴포넌트에서 이 옵션을 선언할 때는 defineOptions 매크로를 사용할 수 있습니다:

    vue
    <script setup>
    defineProps(['label', 'value'])
    defineEmits(['input'])
    defineOptions({
      inheritAttrs: false
    })
    </script>
    
    <template>
      <label>
        {{ label }}
        <input
          v-bind="$attrs"
          v-bind:value="value"
          v-on:input="$emit('input', $event.target.value)"
        />
      </label>
    </template>
  • 관련 문서

components

컴포넌트 인스턴스에서 사용할 수 있도록 컴포넌트를 등록하는 객체입니다.

  • 타입

    ts
    interface ComponentOptions {
      components?: { [key: string]: Component }
    }
  • 예시

    js
    import Foo from './Foo.vue'
    import Bar from './Bar.vue'
    
    export default {
      components: {
        // 축약형
        Foo,
        // 다른 이름으로 등록
        RenamedBar: Bar
      }
    }
  • 관련 문서 컴포넌트 등록

directives

컴포넌트 인스턴스에서 사용할 수 있도록 디렉티브를 등록하는 객체입니다.

  • 타입

    ts
    interface ComponentOptions {
      directives?: { [key: string]: Directive }
    }
  • 예시

    js
    export default {
      directives: {
        // 템플릿에서 v-focus 사용 가능
        focus: {
          mounted(el) {
            el.focus()
          }
        }
      }
    }
    template
    <input v-focus>
  • 관련 문서 커스텀 디렉티브

옵션: 기타 has loaded