재우니의 블로그

 

 

 

 

const { createApp, ref } = Vue;는 객체 비구조화 할당(destructuring assignment)을 사용하여 Vue에서 createApp과 ref를 가져오는 것을 나타냅니다. 이것은 Vue.js 3의 특징 중 하나로, Composition API를 사용할 때 자주 활용됩니다. createApp은 Vue 애플리케이션을 생성하는 함수이고, ref는 반응적인 데이터를 생성하는 함수입니다. 이들은 Vue.js 3에서 Composition API를 사용할 때 자주 사용되는 핵심 함수입니다. 이는 createApp과 ref를 가져온 후 이를 사용하여 Vue 애플리케이션을 생성하고 mount 합니다. 이렇게 함으로써 Vue.js 3에서 Composition API를 활용하여 코드를 더 간결하고 유연하게 작성할 수 있습니다.

 

 

vue.js 2 버전

 

Vue.js 2에서 사용되는 기본적인 코드입니다. 데이터(data)와 메서드(methods)가 모두 Vue 인스턴스 내에 선언되어 있습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue.js 2 Todo List</title>
  <!-- Vue.js 2 CDN -->
  <script src="https://cdn.jsdelivr.net/npm/vue@2"></script>
</head>
<body>
  <div id="app">
    <!-- Vue.js 2 Todo List -->
    <div>
      <h1>Vue.js 2 Todo List</h1>
      <input type="text" v-model="newTodo" @keyup.enter="addTodo" placeholder="새로운 할 일 추가">
      <ul>
        <li v-for="(todo, index) in todos" :key="index">
          {{ todo }}
          <button @click="deleteTodo(index)">삭제</button>
        </li>
      </ul>
    </div>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        newTodo: '',
        todos: []
      },
      methods: {
        addTodo: function() {
          if (this.newTodo.trim() !== '') {
            this.todos.push(this.newTodo.trim());
            this.newTodo = '';
          }
        },
        deleteTodo: function(index) {
          this.todos.splice(index, 1);
        }
      }
    });
  </script>
</body>
</html>

 

 

 

 

Composition API를 사용한 Vue.js 3 코드

 

Composition API를 사용하여 데이터와 메서드를 작성했습니다. setup() 함수 내에서 데이터와 메서드를 정의하고, 이를 외부에 반환하여 Vue 애플리케이션에 사용합니다. 이러한 방식으로 코드를 작성하면 데이터와 메서드를 더 모듈화하고 재사용할 수 있으며, 코드의 가독성을 높일 수 있습니다.

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vue.js 3 Todo List</title>
  <!-- Vue.js 3 CDN -->
  <script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
</head>
<body>
  <div id="app">
    <!-- Vue.js 3 Todo List -->
    <div>
      <h1>Vue.js 3 Todo List</h1>
      <input type="text" v-model="newTodo" @keyup.enter="addTodo" placeholder="새로운 할 일 추가">
      <ul>
        <li v-for="(todo, index) in todos" :key="index">
          {{ todo }}
          <button @click="deleteTodo(index)">삭제</button>
        </li>
      </ul>
    </div>
  </div>

  <script>
    const { createApp, ref } = Vue; // Vue에서 createApp과 ref를 가져옴

    const app = createApp({
      setup() {
        const newTodo = ref(''); // 반응적인 데이터 생성
        const todos = ref([]); // 반응적인 데이터 생성

        const addTodo = () => {
          if (newTodo.value.trim() !== '') {
            todos.value.push(newTodo.value.trim());
            newTodo.value = '';
          }
        };

        const deleteTodo = (index) => {
          todos.value.splice(index, 1);
        };

        // Return reactive data and methods
        return {
          newTodo,
          todos,
          addTodo,
          deleteTodo
        };
      }
    });

    app.mount('#app');
  </script>
</body>
</html>