[VueJS] Vuejs 시작하기

Cover image

Vue.js 시작하기


개발 환경 설정

설치할 프로그램

  • Chrome
  • Visual Studio Code
  • Node.js
  • Vue.js Devtools

관련 코드

설정 플러그인

  • Vetur
  • Night Owl
  • Material Icon Theme
  • Live Server
  • ESLint
  • Prettier
  • Auto Close Tag
  • Atom Keymap

Vue 이해하기

Vue 는 무엇인가?

MVVM 패턴의 뷰모델(ViewModel)레이어에 해당하는 화면(View)단 라이브러리입니다.

View(DOM) ---> ViewModel, DOM Listeners(Vue) ----> Model(Plain Jav Script Object)

View(DOM) <--- ViewModel, DOM Bindings(Vue) <---- Model(Plain Jav Script Object)

단축키

  1. ! + tab 을 누르게 되면, head, body 등을 다 만들어준다.
  2. div#{id이름} 을 작성하게 되면 자동완성해준다.
  3. script + tab 을 누르게 되면 script을 자동완성해준다.
  4. log + tab 을 누르게 되면, console.log 를 완성해준다.
  5. tab 은 자동완성이 된다.

등등 편한 테크가 많다.

reactivity

데이터의 변화를 인지하여 화면에 그려주는 것.

Object.defineProperty() API 문서 링크

// Object.defineProperty('대상 객체', '객체_속성', {
//    // 정의할 내용
// })

Object.defineProperty(viewModel, 'str', {
  // 속성에 접근했을 때의 동작을 정의
  get: function() {
    console.log('접근')
  },
  // 속성에 값을 할당했을 때의 동작을 정의
  set: function(newValue) {
    console.log('할당', newValue)
    render(newValue)
  },
})

reacitivity의 핵심은 데이터의 변화를 라이브러리에서 감지해서, 알아서 화면을 자동으로 그려줍니다.

라이브러리화?

아래처럼 할 수 있음

;(function() {
  function init() {
    Object.defineProperty(viewModel, 'str', {
      // 속성에 접근했을 때의 동작을 정의
      get: function() {
        console.log('접근')
      },
      // 속성에 값을 할당했을 때의 동작을 정의
      set: function(newValue) {
        console.log('할당', newValue)
        render(newValue)
      },
    })
  }

  function render(value) {
    div.innerHTML = value
  }

  init()
})()

인스턴스

인스턴스는 뷰로 개발할 때 필수로 생성해야 하는 코드입니다.

var vm = new Vue({}) // 이런식으로 하면 인스턴스를 생성한것.

생성자 함수

약속 중 하나는 생성자 함수의 맨앞은 대문자로 시작합니다.

인스턴스 옵션 속성

일반적으로 객체를 선언할 때, 리터럴 방법이 더 좋을 때가 많다.(변수 선언하지말고.)

new Vue({
  el: ,
  template: ,
  data: ,
  methods: ,
  created: ,
  watch: ,
});

인스턴스에서 사용할 수 있는 속성과 API는 다음과 같다.

  • el : 인스턴스가 그려지는 화면의 시작점(특정 HTML 태그)
  • template : 화면에 표시할 요소 (HTML, CSS 등)
  • data : 뷰의 반응성(Reactivity)가 반영된 데이터 속성
  • methods : 화면의 동작과 이벤트 로직을 제어하는 메서드
  • created : 뷰의 라이프 사이클과 관련된 속성
  • watch : data에서 정의한 속서이 변화했을 때 추가 동작을 수행할 수 있게 정의하는 속성
  • 이외에도 많은 속성들이 있음...

컴포넌트

가장 큰 장점은 재사용이 가능한 것. 화면의 영역을 분리해서 보여주는 것.

<body>
  <div id="app">
    <app-header></app-header>
    <app-footer></app-footer>
  </div>

  <div id="app2">
    <app-header></app-header>
    <app-footer></app-footer>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // 전역 컴포넌트
    // Vue.component('컴포넌트 이름', 컴포넌트 내용);
    Vue.component('app-header', {
      template: '<h1>Header</h1>',
    })

    new Vue({
      el: '#app',
      // 지역 컴포넌트 등록 방식
      components: {
        // '컴포넌트 이름': 컴포넌트 내용,
        'app-footer': {
          template: '<footer>footer</footer>',
        },
      },
    })

    new Vue({
      el: '#app2',
      components: {
        'app-footer': {
          template: '<footer>footer</footer>',
        },
      },
    })
  </script>
</body>

위를 보면 전역 컴포넌트와 지역 컴포넌트가 있는 것을 확인할 수 있다.

전역 컴포넌트

  • 하나면 들어가기 때문에 component 라고 넣어났다.

지역 컴포넌트

  • 여러개가 들어가기 때문에 components 라고 붙여놓았다.
  • 마찬가지로 methods 도 비슷한 논리입니다.

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

  • 인스턴트는 여러개를 생성할 수 있습니다. (필요없을지라도)
  • 인스턴트를 생성하면 Root가 2개가 생깁니다.

좀더 자세하게 알 수 있는 곳.