본문 바로가기
Web/Vue.js

Vue.js 뷰인스턴스 (2)

by 평범한 개발자... 2020. 4. 21.
Vue.js 뷰인스턴스

1. 뷰인스턴스(Instance)

  • 뷰 인스턴스는 Vue.js로 화면을 개발하기 위해 필수적으로 생성해야 하는 기본 단위
  • Vue 생성자는 미리 정의 된 옵션으로, 재사용 가능한 컴포넌트 생성자를 생성하도록 확장 될 수 있음

 

  • 뷰 인스턴스를 생성할 때는 데이터, 템플릿, 마운트할 엘리먼트, 메소드, 라이프사이클 콜백 등의 옵션을 포함할 수 있는 options 객체를 전달 해야함

 

2. 뷰인스턴스 라이프 사이클

뷰인스턴스는 생성될 때, 단계별로 초기화 단계를 거침. 예를들어 생성될 때, 데이터가 변경 될 때, 인스턴스가 파괴 될 때 등.

  • 라이프 사이클

    • 인스턴스의 상태에 따라(혹은 단계별로) 호출할 수 있는 속성들
    • created, mounted, updated, destroyed 등 여러 개의 속성이 존재
  • 라이프 사이클 훅

    • 각 라이프 사이클 속성에서 실행되는 사용자 정의 로직을 실행

 

  • 뷰인스턴스 전체 라이프사이클 lifecycle

 

  1. 이벤트 및 라이프 사이클 초기화 후 beforeCreate 호출

    • 이 단계에서는 data 속성과 methods 속성이 아직 인스턴스에 정의되어있지 않음

    • DOM과 같은 화면 요소에 접근 불가

       

  2. 반응성 및 주입 초기화 후 created 호출

    • this.data 또는 this.fetchData와 같은 로직들을 이용하여 data와 methods 속성에 정의된 값에 접근 가능

    • 인스턴스가 아직 화면에 부착되기 전이기 때문에, template 속성에 정의된 DOM 요소 접근 불가

       

  3. el요소가 화면에 부착되기전 beforeMount 호출

    • template 속성에 지정한 마크업 속성을 render() 함수로 변환된 후 화면에 부착되기 전의 단계

    • render() 함수가 호출되기 직전에 필요한 로직을 추가하기 좋음

       

  4. el요소가 화면에 부착된 후 Mounted 호출

    • 화면 요소를 제어하는 로직을 수행하기 좋은 단계

    • DOM에 인스턴스가 부착되자마자 바로 호출되기 때문에, 하위 컴포넌트나 외부 라이브러리에 의하 추가된 화면 요소들은 변환되는 시점이 다를 수 있음

      • 이런 경우, $nextTick() API를 이용하여 최총 HTML코드로 변환될 때 까지 기다린 후 로직 추가

         

  5. 데이터 변경이 감지되면

    1. 화면에 다시 그리기전에 beforeUpdate 호출

      • $watch 속성으로 변경 감지
      • 변경 예정인 새 데이터에 접근 가능하여 새로운 값과 관련된 로직을 미리 넣을 수 있음
    2. 화면에 그려진 후 updated 호출

      • 데이터 변경 후 화면 요소 제어와 관련된 로직이나 데이터 값 갱신을 추가하기 좋은 단계

      • 이 단계에서 값을 변경하면 무한 루프에 빠질 수 있음

        • computed, watch와 같은 속성 사용 필요

           

  6. 인스턴스요소가 파괴되기 전에 beforeDestory 호출

    • 아직 인스턴스 접근 가능함

    • 뷰인스턴스의 데이터를 삭제하기 좋은 단계

       

  7. 인스턴스 요소가 파괴된 후 destoryed 호출

     

3. 실습 예제

image-20200421170905573

  • $destroy 함수는 직접 호출하면 안되지만, 라이프사이클의 이해를 돕기 위해 사용
  • 데이터 변경이 없었기 때문에 updated, beforeUpdate는 호출되지 않음
  • 호출되도록 mounted의 로직을 수정

image-20200421171306313

 

[참고]

  1. Do it! Vue.js 입문 - 장기효
  2. https://kr.vuejs.org/v2/guide/index.html
반응형

'Web > Vue.js' 카테고리의 다른 글

[Vue.js] - HTML5 WebSocket(웹 소켓) 소스코드 및 데모 사이트  (0) 2020.11.13
Vue.js 뷰 템플릿 정리 (5)  (0) 2020.05.07
Vue.js 뷰 라우터 정리 (4)  (0) 2020.04.29
Vue.js 컴포넌트 (3)  (0) 2020.04.23
Vue.js란 무엇인가? (1)  (1) 2020.04.20

댓글