Vue3入门
什么是Vue3?
Vue.js 3.0是Vue.js框架的一个全新版本,带来了许多新特性和变化。 Vue.js 3.0的响应式系统经过了全面升级,并且提供了更好的组件化、路由支持、状态管理和TypeScript支持。 这些变化使得Vue.js 3.0更加高效、灵活和易于维护。
入门
入门Vue3可按以下步骤:
- 安装Vue3:在终端中使用npm安装Vue CLI(命令行界面)。
- 创建Vue3项目:使用Vue CLI创建新项目,这样可以轻松设置和管理Vue3应用程序。
- 编写Vue3组件:Vue3使用组件来构建应用程序,为应用程序提供结构和功能。编写组件时,需要了解Vue3的核心概念,如模板、指令、生命周期等。
- 数据绑定:Vue3支持双向数据绑定,这意味着当数据发生变化时,视图会自动更新。
- 事件处理:Vue3允许使用@符号来注册事件处理程序。
- 使用Vue Router: Vue Router是Vue3官方提供的路由管理器,可帮助您为应用程序创建路由和导航。
- 使用Vuex:Vuex是Vue3官方提供的状态管理库,可帮助您管理应用程序的状态并进行全局状态共享。
安装命令
安装 Vue3 可以使用 npm 或者 yarn
npm install -g vue@next
其中 -g
选项表示全局安装,vue@next
表示安装 Vue3 版本。如果您希望在项目中使用 Vue3,则应在项目文件夹中运行该命令,并删除 -g
选项。
如果您使用 yarn,可以使用以下命令安装 Vue3:
yarn add vue@next
注意,Vue3 的包名为 vue@next
,而不是 vue
。
创建Vue3项目
1.确保您已经安装了最新版本的 Node.js 和 npm。您可以在终端中运行以下命令来检查:
node -v
npm -v
2.安装 Vue CLI。在终端中运行以下命令:
npm install -g @vue/cli
3.使用 Vue CLI 创建一个新项目。在终端中运行以下命令:
vue create my-project
其中 my-project
是您要创建的项目名称。Vue CLI 将会提示您选择一些配置选项,例如包管理器、要使用的预设(预先配置好的设置)等。
4.进入项目目录并启动开发服务器。在终端中运行以下命令:
cd my-project
npm run serve
也可以在文件夹路径打开cmd 输入
npm create vue@3
回车后创建项目
编写Vue3组件
Vue3 使用组件来构建应用程序,为应用程序提供结构和功能。以下是 Vue3 组件的一些核心概念:
- 模板:Vue3 组件使用模板来定义其结构和样式。您可以在模板中使用插值表达式、指令和事件绑定等特性来动态渲染内容。
- 指令:Vue3 中的指令是以
v-
开头的属性,可以用于控制 DOM 元素的行为和属性。例如,v-if
指令可用于根据条件显示或隐藏元素,v-for
指令可用于循环渲染列表数据等。 - 生命周期:生命周期是 Vue3 组件在实例化、更新和销毁期间触发的一系列钩子函数。通过这些钩子函数,您可以在组件生命周期的不同阶段执行特定的操作,例如在
created
钩子函数中执行异步加载数据的操作。 - 数据绑定:Vue3 支持双向数据绑定,这意味着当组件的数据发生变化时,视图会自动更新,并且当用户与视图进行交互时,组件的数据也会自动更新。
- Props:Props 是从父组件传递到子组件的数据。父组件可以将数据作为 props 传递给子组件,在子组件中使用它们来渲染组件的内容。
Vue3组件创建基本步骤
编写 Vue3 组件的基本步骤如下:
- 创建组件:可以在项目中创建一个
.vue
文件来定义组件。 - 编写模板:在
.vue
文件中,使用<template>
标签来定义组件的 HTML 模板。 - 编写脚本:在
<script>
标签中编写组件的 JavaScript 代码。通过export default
导出一个对象,该对象包含组件的选项,例如组件的名称、数据、方法和生命周期钩子等。 - 注册组件:将组件注册到 Vue3 中,以便在应用程序中使用它。可以使用全局注册或局部注册的方式来注册组件。
下面是一个简单的 Vue3 组件示例:
<template>
<div>
<h1>{{ message }}</h1>
<button @click="onClick">Click me</button>
</div>
</template>
<script>
export default {
name: 'MyComponent',
data() {
return {
message: 'Hello, World!'
}
},
methods: {
onClick() {
alert('Button clicked!')
}
}
}
</script>
在上面的示例中,我们定义了名为 MyComponent
的组件,并在其中定义了一个数据属性 message
和一个方法 onClick
。在模板中,我们使用插值表达式来动态渲染 message
变量,在按钮上绑定 onClick
方法,以便在单击按钮时触发。
要在应用程序中使用该组件,我们需要将其注册到 Vue3 实例中。例如,可以使用全局注册的方式将组件注册到 Vue3 实例中,如下所示:
import { createApp } from 'vue'
import MyComponent from './MyComponent.vue'
const app = createApp({})
app.component('my-component', MyComponent)
app.mount('#app')
在应用程序中使用该组件时,只需在模板中添加以下标签即可:
<my-component></my-component>
数据绑定
Vue3 中的数据绑定主要包括以下几种形式:
- 插值表达式:使用
{{ }}
将数据绑定到模板中。例如,<p>{{ message }}</p>
将会渲染message
数据的值。 - v-bind 指令:用于将属性与数据绑定。例如,
<img v-bind:src="imageSrc">
将会动态地将imageSrc
数据的值赋给src
属性。 - v-model 指令:用于在表单元素(如输入框、单选按钮、复选框)和组件之间实现双向数据绑定。例如,
<input v-model="message">
表示将输入框中的值与message
数据进行双向绑定。 - 计算属性:用于基于已有的数据计算出一个新的值,并将其绑定到模板中。例如,定义一个名为
reversedMessage
的计算属性来反转message
数据的值:
computed: {
reversedMessage() {
return this.message.split('').reverse().join('')
}
}
- 监听器:用于监听数据的变化,并触发回调函数执行相应操作。例如,定义一个名为
watchedMessage
的监听器来在message
数据发生变化时触发回调函数:
watch: {
message(newValue, oldValue) {
console.log(`message changed from ${oldValue} to ${newValue}`)
}
}
事件处理
Vue3 中的事件处理方式与 Vue2 有所不同。在 Vue2 中,我们通常使用 v-on
或 @
来绑定事件处理函数,然后在组件中定义对应的方法来实现逻辑。
而在 Vue3 中,我们可以使用 v-on
指令或 @
缩写指令来绑定事件处理函数,但方法的定义有所不同。具体来说,我们需要使用 setup()
函数来定义事件处理函数。
例如,下面是一个鼠标点击事件处理函数的示例:
<template>
<button @click="handleClick">Click me</button>
</template>
<script>
import { ref } from 'vue'
export default {
setup() {
const count = ref(0)
function handleClick() {
count.value++
console.log(`button clicked ${count.value} times`)
}
return {
handleClick
}
}
}
</script>
上面的代码中,我们首先导入了 ref
函数,用于创建响应式数据。然后在 setup()
函数中定义了一个名为 handleClick
的事件处理函数,并将其返回给模板中的 @click
指令进行绑定。在事件处理函数中,我们通过 count.value++
来更新计数器的值,并在控制台打印出当前计数值。
需要注意的是,在 Vue3 中,事件处理函数必须使用 setup()
函数来定义,并且需要在 return
语句中将其暴露出来。这样做是因为在 Vue3 中,组件实例的生命周期钩子函数和事件处理函数都是作为 setup()
函数的一部分来定义的。
使用Vue Router
在 Vue3 中使用 Vue Router 需要先安装 Vue Router。可以通过以下命令来安装:
npm install vue-router@4
安装完成后,我们需要在项目中创建一个路由器实例,并将其注入到应用程序中。
下面是一个简单的示例,演示如何在 Vue3 中使用 Vue Router:
<!-- App.vue -->
<template>
<div>
<router-link to="/">Home</router-link>
<router-link to="/about">About</router-link>
<router-view></router-view>
</div>
</template>
<script>
import { createRouter, createWebHistory } from 'vue-router'
import Home from './components/Home.vue'
import About from './components/About.vue'
const routes = [
{ path: '/', component: Home },
{ path: '/about', component: About }
]
const router = createRouter({
history: createWebHistory(),
routes
})
export default {
router
}
</script>
上面的代码中,我们首先导入了 createRouter
和 createWebHistory
函数,用于创建路由器实例和路由模式。然后定义了两个组件 Home
和 About
,并在路由器实例中配置了相应的路由规则。最后将路由器实例导出,并在根组件中进行注入。
在模板中,我们可以使用 router-link
组件来生成带有正确 href
属性的链接,以便用户可以点击它们并导航到不同的页面。而 router-view
组件则用于渲染匹配到的组件。
需要注意的是,在 Vue3 中,路由器实例和路由的配置方式都有所不同,并且在根组件中需要将路由器实例进行注入。
使用vuex
Vue3中使用Vuex需要先安装Vuex:
npm install vuex@next --save
然后在Vue3应用程序的入口文件中,使用createStore
方法创建一个store对象并将其导出:
import { createStore } from 'vuex'
const store = createStore({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++
}
},
actions: {
incrementAsync(context) {
setTimeout(() => {
context.commit('increment')
}, 1000)
}
},
getters: {
getCount(state) {
return state.count
}
}
})
export default store
在Vue3应用程序中,可以使用provide
和inject
来将store对象注入到子组件中:
import { createApp } from 'vue'
import store from './store'
import App from './App.vue'
createApp(App).provide('store', store).mount('#app')
在子组件中,可以使用inject
来获取store对象并使用Vuex提供的API:
import { defineComponent, inject } from 'vue'
export default defineComponent({
setup() {
const store = inject('store')
const increment = () => {
store.commit('increment')
}
const incrementAsync = () => {
store.dispatch('incrementAsync')
}
const getCount = () => {
return store.getters.getCount
}
return {
increment,
incrementAsync,
getCount
}
}
})
总结
总的来说,Vue3是一款非常强大的前端框架。本文总结了Vue3框架的关键知识点和其他一些功能和特性,包括响应式系统、组件、Vite、自定义指令、Teleport、Suspense、TypeScript和选项式API与组合式API等。Vue3采用了Proxy对象构建响应式系统,提供了Composition API来更好地组织和重用代码,同时引入了Teleport和Suspense等新特性,更好地支持TypeScript,帮助开发人员更加灵活和高效地使用框架。如果想了解和学习更多,非常推荐阅读官方文档,并且动手去实践。
转载自:https://juejin.cn/post/7241490493623975995