为什么学习Vue
Vue 是一种流行的前端 JavaScript 框架,用于构建用户界面。它被设计成简单易用的,并且可以与其他库或现有项目集成。Vue 提供了一种声明性的语法,使用组件化的方式构建用户界面。
Vue 具有以下特点:
- 响应式:Vue 使用响应式的数据绑定,使数据的改变能够自动触发界面的更新。
- 组件化:Vue 将用户界面拆分为独立和可重复使用的组件。每个组件包含自己的逻辑、模板和样式,使得开发、维护和复用变得更加简单。
- 轻量级:Vue 的体积较小且性能优秀,加载速度快,适合用于开发单页应用或小型项目。
- 生态系统:Vue 拥有强大的生态系统,包括第三方插件、工具和支持库,使得开发变得更加高效。
- 双向数据绑定:Vue 支持双向数据绑定,可以方便地将数据从组件传递到视图,并根据用户的操作进行更新。
总的来说,Vue 是一种功能强大、易学易用的前端框架,适用于构建现代化的、交互丰富的 Web 应用程序。
结论:更快、更全。写起来更快,可以使用的功能更全。
为什么学习 vue
我们分别用原生的 javascript 以及 vue 实现一个 Todo List。大家可以直观感受下这两套代码的。
原生 Javascript
<!DOCTYPE html>
<html>
  <head>
    <title>Todo List</title>
    <style>
      body {
        font-family: Arial, sans-serif;
      }
      .container {
        width: 300px;
        margin: 20px auto;
      }
      #todoInput {
        width: 100%;
        padding: 10px;
        margin-bottom: 10px;
      }
      #todoList {
        list-style-type: none;
        padding: 0;
      }
      .todoItem {
        display: flex;
        align-items: center;
        margin-bottom: 5px;
      }
      .todoItem input[type='checkbox'] {
        margin-right: 10px;
      }
      .todoItem input[type='text'] {
        flex-grow: 1;
        padding: 5px;
      }
      .todoItem button {
        margin-left: 5px;
      }
    </style>
  </head>
  <body>
    <div class="container">
      <h1>Todo List</h1>
      <input type="text" id="todoInput" placeholder="Add new todo" />
      <ul id="todoList"></ul>
    </div>
    <script>
      const todoInput = document.getElementById('todoInput');
      const todoList = document.getElementById('todoList');
      todoInput.addEventListener('keydown', function (event) {
        if (event.key === 'Enter') {
          addTodo();
        }
      });
      function addTodo() {
        const todoText = todoInput.value.trim();
        if (todoText !== '') {
          const todoItem = document.createElement('li');
          const checkbox = document.createElement('input');
          const todoTextElement = document.createElement('input');
          const deleteButton = document.createElement('button');
          checkbox.type = 'checkbox';
          todoTextElement.type = 'text';
          todoTextElement.value = todoText;
          deleteButton.textContent = 'Delete';
          deleteButton.addEventListener('click', function () {
            todoList.removeChild(todoItem);
          });
          todoItem.classList.add('todoItem');
          todoItem.appendChild(checkbox);
          todoItem.appendChild(todoTextElement);
          todoItem.appendChild(deleteButton);
          todoList.appendChild(todoItem);
          todoInput.value = '';
        }
      }
    </script>
  </body>
</html>
vue
<!DOCTYPE html>
<html>
  <head>
    <title>Vue Todo List</title>
    <style>
      body {
        font-family: Arial, sans-serif;
      }
      .container {
        width: 300px;
        margin: 20px auto;
      }
      #todoInput {
        width: 100%;
        padding: 10px;
        margin-bottom: 10px;
      }
      #todoList {
        list-style-type: none;
        padding: 0;
      }
      .todoItem {
        display: flex;
        align-items: center;
        margin-bottom: 5px;
      }
      .todoItem input[type='checkbox'] {
        margin-right: 10px;
      }
      .todoItem input[type='text'] {
        flex-grow: 1;
        padding: 5px;
      }
      .todoItem button {
        margin-left: 5px;
      }
    </style>
  </head>
  <body>
    <div id="app" class="container">
      <h1>Vue Todo List</h1>
      <input
        type="text"
        v-model="newTodo"
        id="todoInput"
        placeholder="Add new todo"
        @keydown.enter="addTodo"
      />
      <ul id="todoList">
        <li v-for="(todo, index) in todos" :key="index" class="todoItem">
          <input type="checkbox" v-model="todo.done" />
          <input type="text" v-model="todo.text" />
          <button @click="deleteTodo(index)">Delete</button>
        </li>
      </ul>
    </div>
    <script src="https://unpkg.com/vue@next"></script>
    <script>
      const app = Vue.createApp({
        setup() {
          const newTodo = Vue.ref('');
          const todos = Vue.reactive([]);
          const addTodo = () => {
            const trimmedTodo = newTodo.value.trim();
            if (trimmedTodo !== '') {
              todos.push({ text: trimmedTodo, done: false });
              newTodo.value = '';
            }
          };
          const deleteTodo = (index) => {
            todos.splice(index, 1);
          };
          return {
            newTodo,
            todos,
            addTodo,
            deleteTodo,
          };
        },
      });
      app.mount('#app');
    </script>
  </body>
</html>
原生 js 将大量创建 dom 和数据更新后操作 dom 的逻辑放到了 js 中,而 vue 将这部分逻辑帮你写了。
所以你更多的关注数据的变化,它是数据驱动视图。所以我们可以写更复杂的业务逻辑,效率更高。