2 분 소요


전역 컴포넌트, 지역 컴포넌트란?

전역 컴포넌트

  • Vue 앱 어느 곳에서나, 즉 어느 템플릿에서나 사용 할 수 있는 컴포넌트로 루트 어디든 사용가능한 컴포넌트

지역 컴포넌트

  • 특정 컴포넌트에서만 사용이 되는 유효한 범위의 컴포넌트

전역 컴포넌트 등록 후 호출하는 방법

루트에 있는 main.js 파일에 전역 컴포넌트로 등록 할 수 있다.

예를들어

// main.js

import { createApp } from 'vue';

import App from './App.vue';
import BaseBadge from './components/BaseBadge.vue';

const app = createApp(App);

app.component('base-badge', BaseBadge);

app.mount('#app');

BaseBadge라는 컴포넌트를 전역 컴포넌트로 등록할 경우 위와 같이 main.js에 import를 한 후 app.component에 “base-badge”라는 이름으로 등록 할 수 있다.

이렇게 되면 전역 컴포넌트로 등록이 되어 앱 내의 모든 컴포넌트에 호출하여 사용이 가능하다.

예를들어 BadgeList.vue 컴포넌트에 호출하여 사용한다 했을때

// BadgeList.vue

<template>
  <section>
    <h2>Available Badges</h2>
    <ul>
      <li>
        <base-badge type="admin" caption="ADMIN"></base-badge>
      </li>
      <li>
        <base-badge type="author" caption="AUTHOR"></base-badge>
      </li>
    </ul>
  </section>
</template>

base-badge라는 태그로 바로 호출하여 사용이 가능하다.


지역 컴포넌트로 등록 후 호출하는 방법

지역 컴포넌트는 전역 컴포넌트와 다르게 사용할 해당 컴포넌트에 직접 등록을 하게 된다.

예를들어 App.vue에서 지역 컴포넌트로 등록을 할 경우

// App.vue
<script>
import TheHeader from "./components/TheHeader.vue";
import BadgeList from "./components/BadgeList.vue";
import UserInfo from "./components/UserInfo.vue";

export default {
  components: {
    'the-header' : TheHeader,
    'badge-list' : BadgeList,
    'user-info' : UserInfo
  },

TheHeader, BadgeList, UserInfo라는 이름으로 컴포넌트를 import하고 components오브젝트를 만들고 안에는 호출해서 사용하게 될 이름인 프로퍼티 이름과 import한 컴포넌트를 Key-value형식으로 등록한다.

등록한 컴포넌트를 호출할때는 프로퍼티 이름을 태그형식으로 사용해 호출한다.

// App.vue
<template>
  <div>
    <the-header></the-header>
    <badge-list></badge-list>
    <user-info
      :full-name="activeUser.name"
      :info-text="activeUser.description"
      :role="activeUser.role"
    ></user-info>
  </div>
</template>

이때 좀 더 간결하게 컴포넌트를 등록하고 호출할 수 있다.

// App.vue
<script>
import TheHeader from "./components/TheHeader.vue";
import BadgeList from "./components/BadgeList.vue";
import UserInfo from "./components/UserInfo.vue";

export default {
  components: {
    TheHeader : TheHeader,
    BadgeList : BadgeList,
    UserInfo : UserInfo
  },

위처럼 import해왔던 이름을 그대로 다시 사용하여 프로퍼티 이름으로 사용 가능하다.

하지만 이마저도 생략이 가능하다.

export default {
  components: {
    TheHeader,
    BadgeList,
    UserInfo
  },

아예 import해왔던 이름만 가져와 등록해도 정상적으로 작동한다.

그렇다면 호출할땐 어떻게 해야할까? 3가지 방법이 있다. TheHeader 기준으로 하면

1.

export default {
  components: {
    "the-header" : TheHeader
  },
<the-header></the-header>

위와 같이 정한 이름 그대로 불러오면 된다.

2.

export default {
  components: {
    TheHeader : TheHeader
  },
<the-header></the-header>
<TheHeader />

위와 같이 두가지 방법이 둘 다 가능하다. 어떻게 등록했던 이름과 다른데 가능할까?

이유는 Vue자체에서 번역을 하여 자동으로 연결을 시켜준다고 한다.

3.

export default {
  components: {
   TheHeader
  },
<the-header></the-header>
<TheHeader></TheHeader>
<TheHeader />

3가지 방법 다 작동한다.

사실상 세번째가 제일 사용하기 편하다.


추가적으로 알게 된 내용

사실 이미 알고 있었어야 했던 내용이 아니였나 싶다.

이제라도 정리를 해서 머리속에 저장해두자

  • TheHeader : 첫글자, 중간글자에 대문자를 넣는 표기법 => 파스칼 케이스
  • the_header : 언더바( _ )를 글자 중간에 넣는 표기법 => 스네이크 케이스
  • theHeader : 첫글자는 소문자로 하되 중간글자는 대문자를 넣는 표기법 => 카멜 케이스

카멜 케이스는 글자 모양이 낙타를 닮았다 하여 낙타의 영문인 카멜(Camel)을 이용하여 카멜 케이스가 되었다.

댓글남기기