개발/기타

[Vue.js] Vue 컴포넌트(Component)란?

zz132456zz 2022. 6. 15. 23:04
728x90

컴포넌트(Component)

컴포넌트는 Vue의 가장 강력한 기능 중 하나이다.
HTML Element를 확장하여 재사용 가능한 코드를 캡슐화한다.
Vue Component는 Vue Instance이기도 하기 때문에 모든 옵션 객체를 사용할 수 있다.
Life Cycle Hook 사용 가능하다.
전역 컴포넌트와 지역 컴포넌트가 있다.
전역 컴포넌트를 등록하려면 Vue.component(tagName, options)를 사용한다.
컴포넌트를 components 인스턴스 옵션으로 등록함으로써 다른 인스턴스/컴포넌트의 범위에서만 사용할 수 있는 컴포넌트를 만들 수 있다.

컴포넌트 간 통신
상위(부모) - 하위(자식) 컴포넌트 간의 data 전달 방법
부모에서 자식 : props라는 특별한 속성을 전달한다. (Pass Props)
자식에서 부모 : event로만 전달 가능 (Emit Event)
상위에서 하위 컴포넌트로 data 전달
하위 컴포넌트는 상위 컴포넌트 값을 직접 참조 불가능하다.
data와 마찬가지로 props 속성의 값을 template에서 사용이 가능하다.

 

동적 props
v-bind를 사용하여 부모의 데이터에 props를 동적으로 바인딩할 수 있다.
데이터가 상위에서 업데이트될 때마다 하위 데이터로도 전달된다.

 


다음 간단한 코드를 통해 렌더링 과정을 알아보자.

 

<body>
  <div id="app">
    <h2>props test</h2>
    <child-component propsdata="안녕하세요"></child-component>
  </div>
  <script>
    //하위 컴포넌트
    Vue.component("ChildComponent", {
      template: `<span>{{ propsdata }}</span>`,
      props: ['propsdata'],
    });
    new Vue({
      el: "#app",
    });
  </script>
</body>


◆ 렌더링 과정
1. new Vue()로 상위 컴포넌트인 인스턴스를 하나 생성한다.


2. Vue.component()를 이용하여 하위 컴포넌트인 child-component를 생성한다.


3. <div id="app"> 내부에 <child-component>가 있기 때문에 하위 컴포넌트가 된다. 처음 생성한 인스턴스 객체가 #app의 요소를 가지기 때문에 부모와 자식 관계가 성립한다.


4. 하위 컴포넌트에 props 속성을 정의한다. ['propsdata']


5. html에 컴포넌트 태그(child-component)를 추가한다.


6. 하위 컴포넌트에 v-bind 속성을 사용하면 상위 컴포넌트의 data의 key에 접근이 가능하다. (message)


7. 상위 컴포넌트의 message 속성 값인 String 값이 하위 컴포넌트의 propsdata로 전달된다.


8. 하위 컴포넌트의 template 속성에 정의된 '<span>{{ propsdata }}</span>에게 전달된다.



 

 

 

 

 

 

 

728x90