ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Vue.js] 인스턴스 (Instance), 라이프사이클(LifeCycle)
    Front-End(Web)/Vue 2021. 5. 26. 02:09
    반응형

    React는 파일(혹은 모듈) 자체를 클래스형, 함수형의 컴포넌트로 제작하는 방식이었다.

    이와는 달리, Vue는 컴포넌트를 포함한 다양한 정보가 담긴 인스턴스(new Vue)에 정보를 담는 것으로 보인다.

     

    이에 해당하는 Vue 인스턴스에 대해 학습 및 포스팅할 예정이다.

     

    * 이 글은 캡틴판교님의 Vue.js 강의 및 블로그를 기반으로 학습한 내용을 정리하고 있습니다.


    💚 Vue 인스턴스

    인스턴스는 뷰로 개발할 떄 필수로 생성해야 하는 코드라고 소개된다. Vue.js로 화면을 구성하기 위해 꼭 생성해야 하는 필수 단위인 것이다.

    
      new Vue()
    
      // 변수할당
      var vm = new Vue({
        // options...
      });
    

     

    Vue 앱은 Root Vue 인스턴스를 기점으로, 선택적으로 중첩이 가능하고 재사용 가능한 컴포넌트 트리로 확장된다.

    Root Instance
    └─ TodoList
       ├─ TodoItem
       │  ├─ DeleteTodoButton
       │  └─ EditTodoButton
       └─ TodoListFooter
          ├─ ClearTodosButton
          └─ TodoListStatistics

     

    - 인스턴스 옵션(속성, API)

    Vue 객체를 생성할 때, 아래와 같이 el, data, template, methods 등 인스턴스 옵션 객체를 포함할 수 있다. (전체옵션 링크)

    new Vue({
      el: ,
      template: ,
      data: ,
      methods: ,
      created: ,
      watch: ,
    });
    • el : Vue 인스턴스와 연결할 HTML 엘리먼트를 선택. 이렇게 연결하게 되면, 이후 해당 엘리먼트 내에서 Vue 조작이 유효해짐
    • template : 화면에 표시할 요소(HTML, CSS 등)
    • data : Vue 인스턴스에 전달되는 정보 혹은 특정 값. 반응성(Reactivity)가 반영된 속성 (React의 state 개념과 유사한 것 같다)
    • props : 부모 컴포넌트의 데이터를 받을 수 있게 노출된 속성의 리스트(해시)
    • methods : 화면의 동작과 이벤트 로직을 제어하는 메서드
    • watch : data에 정의한 속성이 변화했을 때, 추가 동작을 수행하게끔 정의하는 속성
    • computed : Vue 인스턴스에 추가되는 계산된 속성. 모든 getter, setter는 자동으로 this 컨텍스트를 바인딩
    • created(LifeCycle Methods) : Vue 라이프 사이클과 관련된 속성

     

    * data 옵션은 인스턴스 생성시 존재한 값들만 반응형에 해당된다. 그렇기에, 인스턴스를 할당할 때 data 초기화가 반드시 병행된다.

    // 데이터 객체
    var data = { a: 1 }
    
    // Vue인스턴스에 데이터 객체를 추가합니다.
    var vm = new Vue({
      data: data
    })
    
    // 인스턴스에 있는 속성은
    // 원본 데이터에 있는 값을 반환합니다.
    vm.a === data.a // => true
    
    // 인스턴스에 있는 속성값을 변경하면
    // 원본 데이터에도 영향을 미칩니다.
    vm.a = 2
    data.a // => 2
    
    // ... 반대로 마찬가지입니다.
    data.a = 3
    vm.a // => 3
    
    
    // !새로운 속성을 추가/변경하여도 반응형에 해당하지 않음!
    vm.b = 'hi'

    💚 Vue 라이프사이클

    Vue 인스턴스는 생성될 때 일련의 초기화 단계를 거친다. (데이터 관찰(watch), 템플릿 컴파일, 인스턴스 DOM 마운트 및 업데이트)

    위의 경우 안에서 각 시점에서 특정 로직을 실행할 수 있는 LifeCycle Hooks 역시 호출이 된다.

     

    출처 : https://kr.vuejs.org/v2/guide/instance.html

    • beforeCreate, created : 인스턴스의 초기화 전, 후에 동기적으로 실행
    • beforeMount, mounted : 컴포넌트가 el에 마운트되기 전, 후에 동기적으로 실행 (render 호출시점)
    • beforeUpdate, updated : data 옵션이 변경되어 Virtual DOM 리렌더링과 패치가 이뤄지기 전, 후에 동기적으로 실행
    • activated, deactivated : keep-alive 컴포넌트의 활성화, 비활성화 시 동기적으로 실행
    • beforeDestroy, destroyed : 인스턴스가 제거된 전, 후에 동기적으로 실행
    • errorCaptured : 자손 컴포넌트로부터 에러가 캡쳐되었을 때 호출됨

    * options 속성이나 콜백함수에 Arrow Function 사용을 지양한다.

      이유는, Arrow Function은 this 속성을 가지지 않기 때문에, this가 다른 변수로 인지되거나 렉시컬하게 취급될 수 있기 때문이다.


    벌써, Vue의 2번째 포스팅이다. 인스턴스의 분량 자체가 많진 않지만, 다른 부분과 엮기도 애매하고 중요한 개념이라 별도로 정리한다.

    다음에는, Vue의 Component에 대해 알아보는 포스팅들을 영상학습과 병행하여 작성하겠다. (템플릿, 바인딩 등 개념은 이후 작성할 듯)

     

    [출처]

    - Vue 공식문서 : https://kr.vuejs.org/v2/guide/instance.html

    - 캡틴판교 님의 블로그 : https://joshua1988.github.io/web-development/vuejs/vuejs-tutorial-for-beginner/  

     

    반응형

    'Front-End(Web) > Vue' 카테고리의 다른 글

    [Vue.js] Vuex - (1) Vuex 기본  (0) 2021.06.10
    [Vue.js] Template 문법  (0) 2021.06.03
    [Vue.js] Vue Router  (0) 2021.06.02
    [Vue.js] 컴포넌트(Component), Props & Event  (0) 2021.05.26
    [Vue.js] Vue 개요 및 세팅(CLI)  (0) 2021.05.10
Designed by Tistory.