본문 바로가기
Web/Vue.js

Vue.js 컴포넌트 (3)

by 평범한 개발자... 2020. 4. 23.
Vue.js 컴포넌트

1. 컴포넌트

  • 컴포넌트는 Vue의 가장 강력한 기능 중 하나
  • 기본 HTML 엘리먼트를 확장하여 재사용 가능한 코드를 캡슐화 하는데 도움
  • 뷰컴포넌트는 뷰인스턴스이기도 하기 때문에, 모든 옵션 객체와 라이프사이클 훅 사용 가능

 

2. 컴포넌트 등록

  • 컴포넌트를 등록하는 방법은 두 가지가 있음

    • 전역 등록: 특정 인스턴스에서만 사용 가능

    • 지역 등록: 뷰로 접근 가능한 모든 범위 사용 가능

       

2.1 전역 컴포넌트 등록

image

 

2.2 지역 컴포넌트 등록

image

 

2.3 지역컴포넌트와 전역컴포넌트 동작 비교

  • 2개의 뷰인스턴스 생성(app1, app2)

79943933-3ad92100-84a5-11ea-8593-2f8219380e61

 

  • 실행 결과

    • 전역컴포넌트는 app1, app2 뷰인스턴스에 모두 적용
    • 지역컴포넌트는 app1 인스턴스에만 적용

 

3. 컴포넌트 통신

  • 컴포넌트는 자체적으로 고유한 유효 범위(Scope)를 갖고 있음

    • 유효 범위가 독립적이기 때문에, 서로 다른 컴포넌트의 값을 직접적으로 참조할 수 없음
  • 컴포넌트끼리의 통신을 위해 Vue.js에서 별도의 옵션을 제공

    • 부모-자식 컴포넌트 관계에서, 방향에 따라 옵션이 다름

      • 부모 → 자식: props
      • 자식 → 부모: events

image

3.1 부모 → 자식 컴포넌트로 데이터 전달 (props)

  • props 정의

 

  • props 예제

 

image

 

3.2 자식 → 부모 컴포넌트로 데이터 전달 (v-on, $emit)

  • v-on:이벤트명="메소드명"

    • 이벤트 감지 역할, 해당 이벤트가 발생하면 정의된 메소드를 호출
  • $emit(이벤트명,데이터)

    • 이벤트 발생 역할, $emit을 호출하는 시점에 이벤트를 발생 시킴
    • 데이터 파라미터 생략 가능 → $emit(이벤트명)

 

image

image

 

3.3 부모 ↔ 자식의 관계가 아닌 컴포넌트 통신 (이벤트버스)

  • 이벤트 버스를 위한 뷰 인스턴스 생성
  • $emit 메소드를 이용하여 이벤트 전달
  • $on 메소드를 이용하여 이벤트 수신

image

 

  • props 속성을 이용하지 않고, 원하는 컴포넌트간에 직접적으로 데이터를 전달하여 편리함

    • 컴포넌트가 많아지면 관리가 되지 않는 문제 발생
    • 이 문제를 해결하기위해 뷰엑스(Vuex)라는 상태 관리 도구 필요

 

반응형

댓글