본문 바로가기

FE/Vue.js

[ Vue 3 ] Instance, Methods, Directive(v-for)

 

 

 

 

 

 

Instance

Vue로 화면을 개발하기 위해 필수적으로 생성해야 하는 기본 단위 옵션 속성

 

 

시작할때 생성했던 index.html을 다시한번 보면

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">{{message}}</div>
<script>
  Vue.createApp({
    data() {
      return {
        message: "hi",
      };
    },
  }).mount("#app");
</script>

모든 Vue 앱은 createApp 함수를 사용하여 새로운 애플리케이션 인스턴스를 생성하는 것으로 시작한다.

인스턴스를 만들어서 그 인스턴스를 유효하게 다룰 수 있는 화면의 영역을 지정해줘야 한다.

>> HTML태그를 의미하고, 위의 코드에서는 div태그를 감싸는 body태그로 보통 작성한다.

 

 

화면의 영역중에 어느 부분에다가 Vue의 인스턴스를 적용할지 하는 부분이 바로 mount 하는 부분이다

앱 인스턴스는 .mount() 메서드가 호출될때까지 아무것도 렌더링하지 않는다.

'컨테이너'가 될 실제 DOM 엘리먼트 또는 셀렉터 문자열을 인자로 필요한다.

 

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<body>
  <div id="app">{{message}}</div>
</body>
<script>
  // Vue 2
  new Vue({
    el: "#app",
  });
  new Vue({}).$mount("#app");

  // Vue 3
  Vue.createApp({
    data() {
      return {
        message: "10",
      };
    },
  }).mount("#app");
</script>

Vue 2와 Vue 3의 문법적인 차이를 나타내는 코드를 작성해봤다.

암튼 지금은 Vue 3를 사용하기 때문에 아래의 코드를 사용하면 된다 !

 

 

https://ko.vuejs.org/guide/essentials/application

 

Vue.js

Vue.js - The Progressive JavaScript Framework

vuejs.org

위의 문서를 참고하자

 

 

 

Methods

인스턴스안에서 사용할 수 있는 속성

Vue.createApp({
  template: ,
  data: ,
  methods: ,
  created: ,
  watch: ,
});

컴포넌트 옵션 속성( 인스턴스 옵션속성 / 옵션API )

  • template : 화면에 표시할 요소 (HTML, CSS 등)
  • data : 뷰의 반응성(Reactivity)이 반영된 데이터 속성
  • methods : 화면의 동작과 이벤트 로직을 제어하는 메서드
  • created : 뷰의 라이프사이클과 관련된 속성
  • watch : data에서 정의한 속성이 변화했을 때 추가 동작을 수행할 수 있게 정의하는 속성

 

<!-- HTML -->
<div id="app">

</div>

<!-- JavaScript -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  Vue.createApp({

  }).mount("#app");
</script>

우선 html, JavaScript단으로 나눴고, 인스턴스 생성해서 div태그를 마운트( #app ) 해줬다.

위의 코드가 기본틀? 우선 여기서부터 시작하는것같다

 

 

data라는 인스턴스 옵션 속성을 선언해보

자바스크립트는 1급 함수이기때문에 객체에 함수를 붙일 수 있다.

<!-- HTML -->
<div id="app">
  <p>{{count}}</p>
</div>

<!-- JavaScript -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  Vue.createApp({
    data: function () {
      return {
        count: 0,
      };
    }
  }).mount("#app");
</script>

이렇게 코드작성하면 HTML화면에 0이 출력이 되는걸 확인할 수 있고

Reactivity가 주입된걸 알 수 있다.

이런식으로 + 버튼을 누르면 바로 반응을 하는것

 

이걸 버튼을 만들어서 조정하게 해보자 - methods를 이용해서

 

<!-- HTML -->
<div id="app">
  <p>{{count}}</p>
  <button v-on:click="addCount">+</button>
  <button v-on:click="minCount">-</button>
</div>

<!-- JavaScript -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  Vue.createApp({
    data: function () {
      return {
        count: 0,
      };
    },
    methods: {
      addCount() {
        // addCount : function()을 축약해서 사용가능
        this.count++;
      },
      minCount() {
        this.count--;
      },
    },
  }).mount("#app");
</script>

1.addCount() -> addcount() : function()을 축약해서 사용

2. this의 의미는 createApp에 있는 count에 접근하겠다는 의미

3. v-on : Vue에서 제공하는 디렉티브라고 하는 개념 -> click하면 addCount라는 메소드를 실행하겠다.

 

화면의 UI를 조작하기 위해서 전반적인 로직들이 작성될건데

그걸 의미있는 액션들의 이름으로 메서드를 분리해서 작성하면 된다.

 

 

 

Directive

지시문, v-xxx형식으로 자신만의 속성을 제공한다.

 

종류 v-ifv-elsev-forv-bindv-model등 되게 다양하게 있는데, 이번엔 그중에서 v-for을 사용해보자

 

 

배열을 출력하는 코드를 간단하게 작성해보면

<!-- HTML -->
<div id="app">
  <ul>
    <li>{{item[0]}}</li>
    <li>{{item[1]}}</li>
    <li>{{item[2]}}</li>
  </ul>
</div>
<!-- JavaScipt -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  Vue.createApp({
    data() {
      return {
        items: ["삼성", "네이버", "인프런"],
      };
    },
  }).mount("#app");
</script>

이렇게 될텐데, 배열의 길이가 길어질수록 너무 번잡하게 될 코드이기때문에

v-for를 사용해서 간단하게!

 

ul의 자식요소인 li를 작성하고 tab을 누르면 자동으로 

<div id="app">
  <ul>
    <li></li>
  </ul>
</div>

이렇게 코드생성이 된다.

 

 

<!-- HTML -->
<div id="app">
  <ul>
    <li v-for="item in items">{{ item }}</li>
  </ul>
</div>
<!-- JavaScipt -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script>
  Vue.createApp({
    data() {
      return {
        items: ["삼성", "네이버", "인프런"],
      };
    },
  }).mount("#app");
</script>

<li> 안에서 v-for을 이용해서 배열을 순회할건데

items배열을 가져와서 item이라는 이름으로 반복하게 지정해줬고

 

이렇게 출력되고, 개발자도구에서 값을 수정하면 바로 화면단에서도 수정되어 출력되는걸 확인할 수 있다.

 

 

 

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

[ Vue.js ] 싱글 파일 컴포넌트  (0) 2024.05.08
[ Vue 3 ] Template Syntax  (0) 2024.05.05
[ Vue 3 ] Component, Event Emit  (0) 2024.05.03
[ Vue 3 ] Reactivity  (0) 2024.05.02
[ Vue 3 ] 시작, 개발환경 설정( Vue CLI )  (0) 2024.05.02