本文详细介绍了Vue3的核心概念和新特性,包括响应式系统、Composition API和Teleport等,并对比了Vue3与Vue2的区别。文章还涵盖了Vue3的安装步骤、基础语法、组件化开发、状态管理和路由配置等知识点,提供了丰富的示例代码,是学习Vue3资料的绝佳指南。
Vue3简介Vue.js 是一个用于构建用户界面的渐进式框架。Vue3是Vue.js的最新版本,相比Vue2,Vue3带来了性能上的优化,更简洁的API和更好的开发者体验。以下是Vue3的核心概念:
Vue3在架构和功能上有了显著改变,主要区别包括:
安装Vue3可以使用Vue CLI命令行工具,这是一个强大的工具,可以快速搭建Vue项目。以下是安装Vue CLI的步骤:
npm install -g @vue/cli
vue create my-project
cd my-project npm run serve
Vue的模板语法允许开发者在HTML中直接编写Vue实例的声明性内容。Vue使用了Mustache语法({{ }})来表示模板中的变量,以及v-开头的指令来声明行为。
示例代码:
<template> <div> <p>{{ message }}</p> <button v-on:click="increment">{{ count }}</button> </div> </template> <script> export default { data() { return { message: 'Hello Vue!', count: 0 } }, methods: { increment() { this.count++ } } } </script>
计算属性(computed)和方法(methods)都是在Vue实例中定义的函数,但它们的使用场景和行为不同。
计算属性:
计算属性基于它们的依赖进行缓存,只有当依赖发生变化时才会重新计算。这对于计算复杂数据时非常有用,因为它会避免不必要的计算。
示例代码:
<template> <div> <p>原始数据: {{ message }}</p> <p>计算属性: {{ reversedMessage }}</p> </div> </template> <script> export default { data() { return { message: 'Hello Vue!' } }, computed: { reversedMessage() { return this.message.split('').reverse().join('') } } } </script>
方法:
方法是Vue实例中的函数,用于处理事件和操作数据。方法不是基于缓存的,每次调用都会执行。
示例代码:
<template> <div> <button v-on:click="reverseMessage">{{ message }}</button> </div> </template> <script> export default { data() { return { message: 'Hello Vue!' } }, methods: { reverseMessage() { this.message = this.message.split('').reverse().join('') } } } </script>
Vue指令是自定义HTML属性,以v-开头,用于处理元素行为。以下是一些常用的指令:
示例代码:
<template> <div> <div v-if="seen">现在你看到我了。</div> <ul> <li v-for="item in items">{{ item }}</li> </ul> <div v-bind:class="{ active: isActive }">class绑定示例</div> <button v-on:click="increment">点击我,数字加1</button> <input v-model="message" placeholder="input here"> </div> </template> <script> export default { data() { return { seen: true, items: ['1', '2', '3'], isActive: true, message: '' } }, methods: { increment() { this.items.push('4') } } } </script>Vue3组件化开发
在Vue中,组件是可复用的Vue实例,它们负责管理和渲染特定的功能或任务。组件通常封装了DOM结构、样式和逻辑。
示例代码:
<!-- MyComponent.vue --> <template> <div class="my-component"> <p>{{ message }}</p> </div> </template> <script> export default { props: { message: String } } </script> <!-- App.vue --> <template> <div id="app"> <my-component message="Hello, My Component!"></my-component> </div> </template> <script> import MyComponent from './components/MyComponent.vue' export default { components: { MyComponent } } </script>
组件可以通过props接收父组件传递的数据,并通过事件向父组件发送数据。
示例代码:
<!-- MyComponent.vue --> <template> <div class="my-component"> <p>{{ message }}</p> <button v-on:click="sendMessageToParent">发送信息到父组件</button> </div> </template> <script> export default { props: { message: String }, methods: { sendMessageToParent() { this.$emit('messageFromChild', this.message) } } } </script> <!-- App.vue --> <template> <div id="app"> <my-component message="Hello, My Component!" @message-from-child="handleMessageFromChild"></my-component> </div> </template> <script> import MyComponent from './components/MyComponent.vue' export default { components: { MyComponent }, methods: { handleMessageFromChild(message) { console.log('消息来自子组件:', message) } } } </script>
插槽允许父组件向子组件传送内容。插槽分为默认插槽和具名插槽。默认插槽没有名称,具名插槽有名称,可以传递多个不同类型的插槽内容。
示例代码:
<!-- MyComponent.vue --> <template> <div class="my-component"> <slot></slot> <slot name="header"></slot> <slot name="footer"></slot> </div> </template> <!-- App.vue --> <template> <div id="app"> <my-component> <template v-slot:header> <h1>这是头部内容</h1> </template> <p>这是默认内容</p> <template v-slot:footer> <p>这是底部内容</p> </template> </my-component> </div> </template> <script> import MyComponent from './components/MyComponent.vue' export default { components: { MyComponent } } </script>Vue3状态管理
Vuex是一个专为Vue.js应用程序开发的状态管理模式。它提供了一个集中式的存储,用来管理应用程序的所有组件的状态。
示例代码:
import { createStore } from 'vuex' export default createStore({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, actions: { increment({ commit }) { commit('increment') } }, getters: { count: state => state.count } })
在Vue应用中使用Vuex,需要先创建一个store实例,并在Vue实例中使用store
选项来使用它。
示例代码:
<template> <div id="app"> <p>{{ count }}</p> <button @click="increment">Increment</button> </div> </template> <script> import { mapState, mapActions } from 'vuex' export default { computed: { ...mapState(['count']) }, methods: { ...mapActions(['increment']) } } </script>
Vuex提供了更多的高级功能,如模块化、命名空间等。模块化可以帮助管理状态和操作,使其更易于维护。
示例代码:
import { createStore } from 'vuex' export default createStore({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, actions: { increment({ commit }) { commit('increment') } }, getters: { count: state => state.count }, modules: { moduleA: { state: { count: 0 }, mutations: { increment(state) { state.count++ } }, getters: { count: state => state.count } } } })Vue3路由配置
Vue Router是Vue.js官方的路由管理器,用于管理单页应用的路由。它可以处理路由的声明、导航、参数传递等功能。
示例代码:
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
在Vue应用中,通过路由实例可以访问不同的视图组件。路由配置通常在main.js或main.ts中设置。
示例代码:
import { createApp } from 'vue' import App from './App.vue' import router from './router' createApp(App).use(router).mount('#app')
Vue Router支持路由参数、命名路由、动态路由等高级功能。这些功能可以使得路由更灵活和强大。
示例代码:
const routes = [ { path: '/user/:id', component: User, props: true }, { path: '/user', redirect: { name: 'user', params: { id: 123 } } } ]Vue3项目部署
Vue项目可以通过npm的构建命令进行打包,生成静态文件,然后可以将其部署到任何静态文件服务器上。
打包项目:
npm run build
dist
文件夹,里面包含了所有静态文件。部署到服务器:
dist
文件夹中的文件部署到服务器上。例如,通过FTP工具上传文件到服务器的指定目录。在本地开发时,有时需要一个静态服务器来测试静态文件。常用的静态服务器有http-server、serve等。
安装http-server:
npm install -g http-server
启动静态服务器:
http-server dist
sudo apt-get update sudo apt-get install nginx
编辑Nginx的配置文件,将静态文件目录指向Vue项目的dist
文件夹。
server { listen 80; server_name yourdomain.com; root /path/to/your/dist; index index.html; location / { try_files $uri $uri/ /index.html; } }
sudo systemctl restart nginx
通过以上步骤,可以将Vue项目成功部署到Nginx服务器上。