Javascript

Vue3学习:从入门到初级实战教程

本文主要是介绍Vue3学习:从入门到初级实战教程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

Vue3学习涵盖了从环境搭建到基础语法、组件化开发、路由与状态管理以及实战项目的全面教程,帮助开发者快速掌握Vue3的核心特性。文章详细介绍了Vue3的主要特性和开发环境的搭建步骤,通过实例演示了Vue3的基础语法和组件开发。此外,还介绍了Vue Router和Vuex的使用方法,并提供了构建一个简单的待办事项应用的实战指导。

Vue3简介与环境搭建

Vue3的主要特性

Vue3 是 Vue.js 的最新版本,发布于2020年9月。Vue3的主要特性包括:

  1. 更小的体积:Vue3的核心库大小减少了约41%。
  2. 更快的渲染速度:Vue3对模板编译器进行了重构,模板执行速度提升了约2倍。
  3. Composition API:引入了Composition API,使得复杂应用的状态管理更加方便。
  4. 更好的TypeScript支持:Vue3与TypeScript更加兼容,提供了更好的类型推断。
  5. 更好的性能优化:Vue3引入了自定义渲染器API,允许开发者更好地控制渲染流程。
  6. 更简单的API:Vue3对API进行了精简和优化,使得开发体验更加流畅。

开发环境搭建

为了开始使用Vue3,你需要确保你的开发环境已经搭建好。以下是搭建Vue3开发环境的步骤:

  1. 安装Node.js:Vue3需要Node.js环境,确保已经安装了Node.js 14.0或以上版本。

    # 检查Node.js是否已安装
    node -v
  2. 安装Vue CLI:Vue CLI是Vue.js的官方脚手架工具。使用以下命令安装Vue CLI:

    npm install -g @vue/cli
  3. 验证Vue CLI安装

    vue --version
  4. 创建Vue3项目:使用Vue CLI创建一个新的Vue3项目:

    vue create my-vue3-app

    在创建项目时,选择Vue3版本:

    Use Vue 3
  5. 运行项目:进入项目目录并启动开发服务器。

    cd my-vue3-app
    npm run serve

第一个Vue3应用实例

创建一个简单的Vue3应用实例,输出“Hello World”。

  1. 在项目目录下,找到src/App.vue文件,将其中的内容替换为以下代码:

    <template>
     <div id="app">
       <h1>{{ message }}</h1>
     </div>
    </template>
    
    <script>
    export default {
     data() {
       return {
         message: 'Hello World'
       }
     }
    }
    </script>
    
    <style>
    #app {
     text-align: center;
     color: #2c3e50;
     margin-top: 60px;
    }
    </style>
  2. 启动开发服务器并访问http://localhost:8080/,你应该能看到“Hello World”显示在页面上。
Vue3基础语法

数据绑定与响应式系统

在Vue3中,数据绑定是通过数据属性(data properties)和模板语法实现的。数据属性是响应式的,当你修改数据属性,视图会自动更新。

  1. 模板语法

    <div id="app">
     <p>{{ message }}</p>
    </div>

    在Vue中,{{ message }}是一个插值表达式,用于在模板中动态显示数据属性的值。

  2. 定义数据属性

    export default {
     data() {
       return {
         message: 'Hello, Vue3!'
       }
     }
    }
  3. 更改数据属性

    在模板中,当message发生变化时,视图会自动更新:

    export default {
     data() {
       return {
         message: 'Hello, Vue3!'
       }
     },
     mounted() {
       setTimeout(() => {
         this.message = 'Hello, World!'
       }, 3000);
     }
    }

计算属性与方法

计算属性(computed properties)是对数据属性进行计算并返回一个值。计算属性是缓存的,只有依赖的数据发生变化时,才会重新计算。

  1. 定义计算属性

    export default {
     data() {
       return {
         firstName: 'John',
         lastName: 'Doe'
       }
     },
     computed: {
       fullName() {
         return `${this.firstName} ${this.lastName}`;
       }
     }
    }
  2. 模板中使用计算属性

    <div id="app">
     <p>{{ fullName }}</p>
    </div>

方法(methods)则是用于定义函数,这些函数可以被模板中的事件处理器调用。

  1. 定义方法

    export default {
     data() {
       return {
         message: 'Hello, Vue3!'
       }
     },
     methods: {
       greet() {
         alert(this.message);
       }
     }
    }
  2. 在模板中调用方法

    <div id="app">
     <button @click="greet">Greet</button>
    </div>

模板语法与指令

Vue的模板语法提供了一系列的HTML指令,用于在视图中添加交互。

  1. 条件渲染

    <div id="app">
     <p v-if="show">Hello, Vue3!</p>
     <p v-else>Goodbye, Vue3!</p>
    </div>
    export default {
     data() {
       return {
         show: true
       }
     }
    }
  2. 列表渲染

    <div id="app">
     <ul>
       <li v-for="item in items">{{ item }}</li>
     </ul>
    </div>
    export default {
     data() {
       return {
         items: ['Apple', 'Banana', 'Cherry']
       }
     }
    }
  3. 事件绑定

    <div id="app">
     <button @click="increment">Increment: {{ count }}</button>
    </div>
    export default {
     data() {
       return {
         count: 0
       }
     },
     methods: {
       increment() {
         this.count++;
       }
     }
    }
Vue3组件化开发

组件基础

Vue组件是可重用的Vue实例片段,每个组件可以有自己的数据、模板、样式和方法。

  1. 定义组件

    <template>
     <div>
       <h1>{{ title }}</h1>
       <p>{{ message }}</p>
     </div>
    </template>
    
    <script>
    export default {
     props: {
       title: String,
       message: String
     },
     data() {
       return {
         count: 0
       }
     }
    }
    </script>
    
    <style scoped>
    h1 {
     color: blue;
    }
    p {
     color: green;
    }
    </style>
  2. 在父组件中使用子组件

    <template>
     <div id="app">
       <app-header title="My App" message="Welcome to Vue3!" />
     </div>
    </template>
    
    <script>
    import AppHeader from './components/AppHeader.vue'
    
    export default {
     components: {
       AppHeader
     }
    }
    </script>

Props与自定义事件

组件之间可以传递数据,父组件通过props向子组件传递数据,子组件通过自定义事件向父组件传递数据。

  1. 传递Props

    <template>
     <div id="app">
       <app-child-component :name="username" />
     </div>
    </template>
    
    <script>
    import AppChildComponent from './components/AppChildComponent.vue'
    
    export default {
     components: {
       AppChildComponent
     },
     data() {
       return {
         username: 'John Doe'
       }
     }
    }
    </script>
    <script>
    export default {
     props: ['name']
    }
    </script>
  2. 自定义事件

    <template>
     <div id="app">
       <app-child-component @child-event="handleChildEvent" />
     </div>
    </template>
    
    <script>
    import AppChildComponent from './components/AppChildComponent.vue'
    
    export default {
     components: {
       AppChildComponent
     },
     methods: {
       handleChildEvent(payload) {
         console.log(payload);
       }
     }
    }
    </script>
    <script>
    export default {
     methods: {
       triggerEvent() {
         this.$emit('child-event', 'Hello from child component!');
       }
     }
    }
    </script>

插槽使用

插槽(slots)用于在组件中定义可插入的内容。父组件可以向子组件的插槽提供内容。

  1. 定义插槽

    <template>
     <div>
       <slot></slot>
     </div>
    </template>
    
    <script>
    export default {
     props: {
       title: String
     }
    }
    </script>
    
    <style scoped>
    .slot-container {
     background-color: lightblue;
     padding: 10px;
    }
    </style>
  2. 使用插槽

    <template>
     <div id="app">
       <app-slot-component>
         <h1>Custom Title</h1>
         <p>Custom content</p>
       </app-slot-component>
     </div>
    </template>
    
    <script>
    import AppSlotComponent from './components/AppSlotComponent.vue'
    
    export default {
     components: {
       AppSlotComponent
     }
    }
    </script>
Vue3路由与状态管理

Vue Router基础

Vue Router是Vue.js官方的路由管理器,用于实现单页面应用(SPA)的导航。

  1. 安装Vue Router

    npm install vue-router@next
  2. 配置路由

    import { createRouter, createWebHistory } from 'vue-router';
    import Home from './views/Home.vue';
    import About from './views/About.vue';
    
    const routes = [
     { path: '/', component: Home },
     { path: '/about', component: About }
    ];
    
    const router = createRouter({
     history: createWebHistory(),
     routes
    });
    
    export default router;
  3. 在主应用文件中使用路由

    import { createApp } from 'vue';
    import App from './App.vue';
    import router from './router';
    
    createApp(App).use(router).mount('#app');
  4. 创建视图组件

    <template>
     <div>
       <h1>Home</h1>
       <router-link to="/about">Go to About</router-link>
     </div>
    </template>
    <template>
     <div>
       <h1>About</h1>
       <router-link to="/">Go to Home</router-link>
     </div>
    </template>
  5. 在模板中使用路由链接

    <template>
     <div id="app">
       <router-view></router-view>
     </div>
    </template>

Vuex入门

Vuex是Vue.js的状态管理模式。它提供了一个集中式的存储,使得多个组件能共享状态。

  1. 安装Vuex

    npm install vuex@next
  2. 创建Vuex Store

    import { createStore } from 'vuex';
    
    const store = createStore({
     state: {
       count: 0
     },
     mutations: {
       increment(state) {
         state.count++;
       }
     },
     actions: {
       increment({ commit }) {
         commit('increment');
       }
     }
    });
    
    export default store;
  3. 在主应用文件中使用Vuex Store

    import { createApp } from 'vue';
    import App from './App.vue';
    import store from './store';
    
    createApp(App).use(store).mount('#app');
  4. 在组件中使用Vuex Store

    <template>
     <div id="app">
       <p>Count: {{ count }}</p>
       <button @click="increment">Increment</button>
     </div>
    </template>
    
    <script>
    import { mapState, mapActions } from 'vuex';
    
    export default {
     computed: {
       ...mapState(['count'])
     },
     methods: {
       ...mapActions(['increment'])
     }
    }
    </script>

Vue Devtools调试工具

Vue Devtools是一个浏览器扩展,用于调试Vue.js应用。它允许你查看组件的结构、状态和生命周期等信息。

  1. 安装Vue Devtools

    • 对于Chrome和Firefox,可以在浏览器的扩展商店中搜索Vue Devtools并安装。
    • 对于Edge,可以在Microsoft Edge商店中搜索Vue Devtools并安装。
  2. 使用Vue Devtools

    • 安装并启动你的Vue3项目。
    • 打开浏览器扩展图标,选择你的Vue3应用进行调试。
    • 在Devtools中,查看组件树、状态、计算属性等信息。
实战项目:构建简单的Vue3应用

项目需求分析

在这个实战项目中,我们将构建一个简单的待办事项(To-Do List)应用。用户可以添加、删除和标记待办事项为已完成。

功能实现步骤

  1. 创建项目

    使用Vue CLI创建一个新的Vue3项目:

    vue create my-todo-app

    在创建项目时,选择Vue3版本:

    Use Vue 3
  2. 安装必要的依赖

    使用Vue Router和Vuex来管理路由和状态:

    npm install vuex@next vue-router@next
  3. 创建项目结构

    mkdir src/views
    mkdir src/components
    touch src/router/index.js src/store/index.js
  4. 配置路由

    import { createRouter, createWebHistory } from 'vue-router';
    import TodoList from '../views/TodoList.vue';
    
    const routes = [
     { path: '/', component: TodoList }
    ];
    
    const router = createRouter({
     history: createWebHistory(),
     routes
    });
    
    export default router;
  5. 创建视图组件

    <template>
     <div>
       <h1>My To-Do List</h1>
       <ul>
         <li v-for="(todo, index) in todos" :key="index">
           <span>{{ todo.text }}</span>
           <button @click="removeTodo(index)">Remove</button>
           <button @click="toggleTodo(index)">Toggle</button>
         </li>
       </ul>
       <input type="text" v-model="newTodo" @keyup.enter="addTodo" placeholder="Add new todo">
     </div>
    </template>
    
    <script>
    import { computed, reactive } from 'vue';
    import { useStore } from 'vuex';
    
    export default {
     setup() {
       const store = useStore();
       const todos = computed(() => store.state.todos);
       const newTodo = reactive('');
    
       const addTodo = () => {
         store.commit('addTodo', newTodo.value);
         newTodo.value = '';
       };
    
       const removeTodo = index => {
         store.commit('removeTodo', index);
       };
    
       const toggleTodo = index => {
         store.commit('toggleTodo', index);
       };
    
       return {
         todos,
         newTodo,
         addTodo,
         removeTodo,
         toggleTodo
       };
     }
    }
    </script>
  6. 配置Vuex Store

    import { createStore } from 'vuex';
    
    const store = createStore({
     state: {
       todos: []
     },
     mutations: {
       addTodo(state, todo) {
         state.todos.push({
           text: todo,
           completed: false
         });
       },
       removeTodo(state, index) {
         state.todos.splice(index, 1);
       },
       toggleTodo(state, index) {
         state.todos[index].completed = !state.todos[index].completed;
       }
     },
     actions: {
       addTodo({ commit }, todo) {
         commit('addTodo', todo);
       },
       removeTodo({ commit }, index) {
         commit('removeTodo', index);
       },
       toggleTodo({ commit }, index) {
         commit('toggleTodo', index);
       }
     }
    });
    
    export default store;
  7. 在主应用文件中使用路由和Vuex Store

    import { createApp } from 'vue';
    import App from './App.vue';
    import router from './router';
    import store from './store';
    
    createApp(App).use(router).use(store).mount('#app');

项目部署与上线

  1. 构建项目

    使用npm构建项目,生成生产环境下的静态文件。

    npm run build
  2. 部署到服务器

    将生成的静态文件部署到服务器上,例如使用Nginx或其他静态文件服务器。

    # 假设你已经有一个Nginx服务器
    cp -r dist/* /var/www/html/
  3. 访问应用

    通过服务器提供的域名访问你的To-Do List应用。

通过以上步骤,你已经成功构建了一个简单的Vue3应用,并将其部署上线。这只是一个基础的示例,你可以根据实际需求进一步扩展和优化应用功能。

这篇关于Vue3学习:从入门到初级实战教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!