본문 바로가기
  • 기억의 유한함을 기록의 무한함으로✍️            예비 개발자가 꿈꾸는 공간 여기는 안나의 개발 블로그 💻
Programming/Vue.js

[Vue.js 입문하기] 뷰 컴포넌트

by 제가안난데여♪(´ε`*) 2022. 7. 21.
728x90

💭뷰 컴포넌트가 무엇인지 알아보고 전역 컴포넌트와 지역컴포넌트의 차이에 대해 알아보자.

❗뷰 컴포넌트

  • 화면의 영역을 구분하여 코드로 관리하는 뷰의 기능이다.

  • 재사용성이 올라가고 빠르게 화면을 제작하기 위해서 컴포넌트로 화면을 관리한다.

  • 컴포넌트 생성시 각 컴포넌트 간의 관계가 생성된다.

  • 코드에서 인스턴스를 생성하면 개발자 도구 vue에서 Root 컴포넌트로 인식

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Document</title>
    </head>
    <body>
      <div id="app"></div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        new Vue({
          el: "#app",
        });
      </script>
    </body>
    </html>
  • 개발자도구

❗ 전역 컴포넌트 생성하기

  • Vue.component 를 사용하여 컴포넌트를 생성하게 되면 전역 컴포넌트를 생성된다.

  • 코드

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <app-header>
          <!-- app-header 컴포넌트의 컴포넌트 태그 -->
        </app-header>
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
        //컴포넌트 생성방법 ---> Vue.component('컴포넌트 이름', 컴포넌트 내용)
    
        //app-header 라는 컴포넌트를 생성해보자!
        Vue.component("app-header", {
          template: "<h1>Header<h1>", //template 이라는 속성은 이 컴포넌트가 표현되는 스타일
        });
    
        new Vue({
          el: "#app",
        });
      </script>
    </body>
    </html>
  • 결과

    • app-header 컴포넌트가 Root 아래 추가 됨을 확인 할 수 있다.
    • Root는 상위 컴포넌트 app-header는 하위 컴포넌트이다.

❗ 지역 컴포넌트 생성하기

  • 전역 컴포넌트로 사용할 경우 사용하지 않는 컴포넌트도 최종 빌드 과정에 포함되어 코드의 양이 커지는 단점이 있어서 전역 컴포넌트보다 지역 컴포넌트로 주로 많이 쓰임

  • Vue 객체의 components라는 옵션을 사용하여 생성

  • 코드

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <app-footer></app-footer>
      </div>
    
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script>
    
        new Vue({
          el: "#app",
          components: {
            //지역 컴포넌트 생성방법 --->'컴포넌트 이름' : 컴포넌트 내용
            "app-footer": {
              template: "<footer>Footer</footer>",
            },
          },
        });
      </script>
    </body>
    </html>
  • 결과

❗ 전역 컴포넌트와 지역 컴포넌트의 차이점

  • 전역 컴포넌트는 대부분 플러그인이나 라이브러리 형태로 전역으로 사용해야 할 컴포넌트만 전역 컴포넌트로 등록하며 코드에서 사용되야하는 컴포넌트는 지역 컴포넌트로 생성하여 사용한다.

❗ 컴포넌트와 인스턴스의 관계

  • id 가 app2인 div 태그를 생성하여 전역 컴포넌트인 app-header와 지역 컴포넌트인 app-footer를 추가하였다.

  • app2가 id 인 div 태그를 붙일 인스턴스 Vue를 생성후 el 속성에 작성하였고 지역 컴포넌트는 생성하지 않았다.

  • div 태그

    <div id="app">
        <app-header>
          <!-- app-header 컴포넌트의 컴포넌트 태그 -->
        </app-header>
        <app-content> </app-content>
        <app-footer></app-footer>
      </div>
      <div id="app2">
        <app-header></app-header>
        <app-footer></app-footer>
      </div>
    • script태그

      <script>
        //전역 컴포넌트 생성방법 ---> Vue.component('컴포넌트 이름', 컴포넌트 내용)
        //app-header 라는 컴포넌트를 생성해보자!
        Vue.component("app-header", {
          template: "<h1>Header<h1>", //template 이라는 속성은 이 컴포넌트가 표현되는 스타일
        });
      
        Vue.component("app-content", {
          template: "<div>content</div>",
        });
      
        new Vue({
          el: "#app",
          components: {
            //지역 컴포넌트 생성방법 --->'컴포넌트 이름' : 컴포넌트 내용
            "app-footer": {
              template: "<footer>Footer</footer>",
            },
          },
        });
      
        new Vue({
          el: "#app2",
        });
      </script>
  • 결과

    오류메시지
     // vue.js:5045 [Vue warn]: Unknown custom element: <app-footer> - did you register the component correctly? For recursive components, make sure to provide the "name" option. (found in <Root>)
    • app-footer는 app2 Root에 추가 되어있지 않음을 확인 할수 있다.
    • 이는 지역 컴포넌트인 app-footer를 새로 만든 Vue 인스턴스에 작성해주지 않았기 때문
      new Vue({
         el: "#app2",
         components: {
           //지역 컴포넌트 생성방법 --->'컴포넌트 이름' : 컴포넌트 내용
           "app-footer": {
             template: "<footer>Footer</footer>",
           },
         },
       });
    • 이렇게 수정하면 제대로 추가됨을 확인할 수 있다.

❓ 개발자 도구에서 Root가 하나로 보여요!

https://chrome.google.com/webstore/detail/vuejs-devtools/iaajmlceplecbljialhhkmedjlpdblhp

  • 위 링크에서 개발자도구 vue를 다시 다운받으세요!




💕 위 내용은 인프런의 Vue.js 시작하기 - Age of Vue.js 를 참고하여 공부하며 개인적으로 정리한 내용입니다. 내용에 오류가 있거나 문제 사항은 댓글로 남겨주시면 감사하겠습니다!
반응형