Vue3是Vue.js的最新版本,于2020年9月18日正式發(fā)布。Vue3相比Vue2有很多改進(jìn)和優(yōu)化,包括但不限于:
(資料圖)
更快的渲染速度:Vue3通過(guò)使用Proxy代理對(duì)象和優(yōu)化虛擬DOM算法等方式,提高了渲染性能。
更小的體積:Vue3的體積比Vue2更小,打包后的文件更小,加載速度更快。
更好的類(lèi)型支持:Vue3對(duì)TypeScript的支持更加友好,提供了更好的類(lèi)型支持。
更好的組合式API:Vue3提供了更好的組合式API,使得組件的復(fù)用和維護(hù)更加方便。
更好的Tree-shaking支持:Vue3對(duì)Tree-shaking的支持更加完善,可以更好地優(yōu)化打包后的代碼。
總之,Vue3是一個(gè)更加優(yōu)秀的版本,可以幫助開(kāi)發(fā)者更好地構(gòu)建高性能、易維護(hù)的Web應(yīng)用程序。
Vue API風(fēng)格Vue API風(fēng)格主要有兩種:對(duì)象風(fēng)格和函數(shù)風(fēng)格。
對(duì)象風(fēng)格
對(duì)象風(fēng)格是Vue 2.x版本的API風(fēng)格,它將Vue實(shí)例作為一個(gè)對(duì)象,通過(guò)對(duì)象的屬性和方法來(lái)操作Vue實(shí)例。例如:
var vm = new Vue({ el: "#app", data: { message: "Hello Vue!" }, methods: { showMessage: function () { alert(this.message) } }})?vm.message = "Hello World!"vm.showMessage()
在上面的代碼中,我們使用對(duì)象風(fēng)格的API來(lái)創(chuàng)建Vue實(shí)例,設(shè)置數(shù)據(jù)和方法,并通過(guò)vm對(duì)象來(lái)操作Vue實(shí)例。
函數(shù)風(fēng)格
函數(shù)風(fēng)格是Vue 3.x版本的API風(fēng)格,它將Vue實(shí)例作為一個(gè)函數(shù),通過(guò)函數(shù)的參數(shù)和返回值來(lái)操作Vue實(shí)例。例如:
import { createApp } from "vue"?const app = createApp({ data() { return { message: "Hello Vue!" } }, methods: { showMessage() { alert(this.message) } }})?const vm = app.mount("#app")?vm.message = "Hello World!"vm.showMessage()
在上面的代碼中,我們使用函數(shù)風(fēng)格的API來(lái)創(chuàng)建Vue實(shí)例,設(shè)置數(shù)據(jù)和方法,并通過(guò)app.mount()方法來(lái)掛載Vue實(shí)例,然后通過(guò)vm對(duì)象來(lái)操作Vue實(shí)例。
總的來(lái)說(shuō),函數(shù)風(fēng)格的API更加簡(jiǎn)潔和易于理解,而且更加符合現(xiàn)代JavaScript的編程風(fēng)格。因此,Vue 3.x版本的API采用了函數(shù)風(fēng)格。
Vue3開(kāi)發(fā)前的準(zhǔn)備在開(kāi)始使用Vue3進(jìn)行開(kāi)發(fā)之前,需要進(jìn)行以下準(zhǔn)備工作:
安裝Node.js和npm
Vue3需要Node.js和npm的支持,因此需要先安裝它們。可以在Node.js官網(wǎng)下載對(duì)應(yīng)版本的安裝包進(jìn)行安裝。
安裝Vue CLI
Vue CLI是Vue.js官方提供的腳手架工具,可以幫助我們快速創(chuàng)建Vue項(xiàng)目。可以使用以下命令全局安裝Vue CLI:
npm install -g @vue/cli
選擇編輯器
選擇一個(gè)適合自己的編輯器進(jìn)行開(kāi)發(fā),推薦使用Visual Studio Code,它有很多Vue相關(guān)的插件和工具。
學(xué)習(xí)Vue基礎(chǔ)知識(shí)
在使用Vue3進(jìn)行開(kāi)發(fā)之前,需要先掌握Vue的基礎(chǔ)知識(shí),包括Vue的核心概念、Vue組件、Vue指令、Vue生命周期等。
學(xué)習(xí)TypeScript
Vue3使用TypeScript進(jìn)行開(kāi)發(fā),因此需要先學(xué)習(xí)TypeScript的基礎(chǔ)知識(shí),包括TypeScript的數(shù)據(jù)類(lèi)型、接口、類(lèi)、泛型等。
總的來(lái)說(shuō),學(xué)習(xí)Vue3需要一定的前置知識(shí),需要掌握Node.js、npm、Vue CLI、編輯器、Vue基礎(chǔ)知識(shí)和TypeScript等知識(shí)點(diǎn)。
vue3 項(xiàng)目目錄結(jié)構(gòu)Vue3項(xiàng)目的目錄結(jié)構(gòu)與Vue2有些不同,主要是因?yàn)閂ue3使用了新的模塊化系統(tǒng)和TypeScript語(yǔ)言。
以下是一個(gè)Vue3項(xiàng)目的典型目錄結(jié)構(gòu):
├── public│ ├── index.html│ └── favicon.ico├── src│ ├── assets│ ├── components│ ├── router│ ├── store│ ├── utils│ ├── views│ ├── App.vue│ └── main.ts├── tests├── node_modules├── package.json├── tsconfig.json└── README.md
public
:存放靜態(tài)資源文件,如HTML文件、圖片、圖標(biāo)等。
src
:存放源代碼文件。
assets
:存放靜態(tài)資源文件,如CSS、圖片、字體等。
components
:存放Vue組件文件。
router
:存放Vue Router路由文件。
store
:存放Vuex狀態(tài)管理文件。
utils
:存放工具函數(shù)文件。
views
:存放頁(yè)面組件文件。
App.vue
:根組件文件。
main.ts
:入口文件,包括Vue實(shí)例的創(chuàng)建和掛載等。
tests
:存放測(cè)試文件。
node_modules
:存放項(xiàng)目依賴(lài)的第三方庫(kù)。
package.json
:存放項(xiàng)目的配置信息和依賴(lài)庫(kù)信息。
tsconfig.json
:存放TypeScript編譯器的配置信息。
README.md
:項(xiàng)目說(shuō)明文件。
總的來(lái)說(shuō),Vue3項(xiàng)目的目錄結(jié)構(gòu)與Vue2有些不同,但是基本的結(jié)構(gòu)還是相似的,包括靜態(tài)資源文件、源代碼文件、測(cè)試文件、依賴(lài)庫(kù)信息等。
vue3 模板語(yǔ)法Vue3的模板語(yǔ)法與Vue2的模板語(yǔ)法基本相同,但也有一些變化。以下是Vue3的模板語(yǔ)法:
插值表達(dá)式
Vue3的插值表達(dá)式使用{{}}
,例如:
{{ message }}
指令
Vue3的指令使用v-
前綴,例如:
常用的指令包括:
v-if
:條件渲染。
v-for
:循環(huán)渲染。
v-bind
:綁定屬性。
v-on
:綁定事件。
v-model
:雙向綁定。
計(jì)算屬性
Vue3的計(jì)算屬性使用computed
關(guān)鍵字,例如:
{{ reversedMessage }}?<script>export default { data() { return { message: "Hello World" } }, computed: { reversedMessage() { return this.message.split("").reverse().join("") } }}</script>
監(jiān)聽(tīng)器
Vue3的監(jiān)聽(tīng)器使用watch
關(guān)鍵字,例如:
{{ message }}?<script>export default { data() { return { message: "Hello World" } }, watch: { message(newValue, oldValue) { console.log(newValue, oldValue) } }}</script>
生命周期
Vue3的生命周期與Vue2基本相同,但是使用了新的API。例如:
{{ message }}?<script>import { onMounted, onUpdated, onUnmounted } from "vue"?export default { data() { return { message: "Hello World" } }, setup() { onMounted(() => { console.log("mounted") }) onUpdated(() => { console.log("updated") }) onUnmounted(() => { console.log("unmounted") }) }}</script>
總的來(lái)說(shuō),Vue3的模板語(yǔ)法與Vue2基本相同,但是使用了新的API,包括computed
、watch
和生命周期等。
在Vue3中,屬性綁定使用v-bind:
或簡(jiǎn)寫(xiě)的:
,例如:
?<script>export default { data() { return { className: "red" } }}</script>
上面的代碼中, 除了綁定data屬性,還可以綁定表達(dá)式、計(jì)算屬性、甚至是方法的返回值。例如: 上面的代碼中, 需要注意的是,在Vue3中,綁定屬性時(shí),可以使用 上面的代碼中, Vue3中的條件渲染和Vue2類(lèi)似,使用 示例代碼如下: 上面的代碼中,根據(jù) 除了 示例代碼如下: 上面的代碼中,根據(jù) 需要注意的是, Vue3中的列表渲染和Vue2類(lèi)似,使用 示例代碼如下: 上面的代碼中,使用 除了數(shù)組,也可以遍歷對(duì)象,例如: 上面的代碼中,使用 需要注意的是,每個(gè) 在Vue3中,通過(guò) 示例代碼如下: 上面的代碼中,使用 需要注意的是, 在Vue3中,事件處理的方式與Vue2相似,可以使用 綁定事件 可以使用 上面的代碼中,使用 事件修飾符 Vue3中提供了新的事件修飾符,包括 上面的代碼中,使用 動(dòng)態(tài)事件名 在Vue3中,可以使用方括號(hào)來(lái)綁定動(dòng)態(tài)事件名。示例如下: 上面的代碼中,使用 自定義事件 在Vue3中,可以使用 上面的代碼中,使用 在Vue3中,事件傳參的方式和Vue2基本相同,可以使用 示例代碼如下: 上面的代碼中,使用 另外,如果需要在事件處理函數(shù)中訪問(wèn)組件實(shí)例,可以使用箭頭函數(shù)來(lái)綁定作用域,例如: 上面的代碼中,使用箭頭函數(shù)來(lái)綁定作用域,從而在事件處理函數(shù)中訪問(wèn)組件實(shí)例。 在Vue3中,事件修飾符的使用方式和Vue2基本相同,可以通過(guò)在事件名后面添加 常用的事件修飾符包括: 示例代碼如下: 上面的代碼中,使用不同的事件修飾符來(lái)控制事件的行為。例如,使用 在Vue3中,計(jì)算屬性的使用方式和Vue2基本相同,可以通過(guò)在組件的 示例代碼如下: 商品數(shù)量:{{ quantity }} 商品總價(jià):{{ totalPrice }} 上面的代碼中,使用 在模板中,可以像訪問(wèn)普通屬性一樣訪問(wèn)計(jì)算屬性,例如 需要注意的是,在Vue3中,計(jì)算屬性的返回值可以是一個(gè)函數(shù),這樣可以實(shí)現(xiàn)動(dòng)態(tài)計(jì)算屬性。示例代碼如下: 商品數(shù)量:{{ quantity }} 商品總價(jià):{{ totalPrice }} 上面的代碼中,計(jì)算屬性 在Vue3中,可以使用 下面是使用對(duì)象語(yǔ)法綁定class的示例代碼: 上面的代碼中,使用 下面是使用數(shù)組語(yǔ)法綁定class的示例代碼: 上面的代碼中,使用 在這個(gè)示例中,如果 需要注意的是,在Vue3中,可以使用動(dòng)態(tài)組件來(lái)動(dòng)態(tài)渲染不同的組件,這個(gè)功能可以使用 上面的代碼中,使用 在Vue3中,可以使用 綁定單個(gè)樣式 可以使用對(duì)象語(yǔ)法來(lái)綁定單個(gè)樣式,對(duì)象的屬性名為樣式名,屬性值為樣式值。示例如下: 上面的代碼中,使用 綁定多個(gè)樣式 可以使用對(duì)象語(yǔ)法來(lái)綁定多個(gè)樣式,對(duì)象的屬性名為樣式名,屬性值為樣式值。示例如下: 上面的代碼中,使用 綁定樣式數(shù)組 可以使用數(shù)組語(yǔ)法來(lái)綁定多個(gè)樣式,數(shù)組中的元素為樣式對(duì)象。示例如下: 上面的代碼中,使用 綁定樣式對(duì)象 可以使用計(jì)算屬性來(lái)動(dòng)態(tài)綁定樣式對(duì)象。示例如下: 上面的代碼中,使用計(jì)算屬性 關(guān)鍵詞:
:class
綁定了一個(gè)名為className
的data屬性,這個(gè)屬性的值為"red"
,所以class
屬性,值為"red"
。 ?<script>export default { data() { return { isActive: true } }, methods: { getClass() { return this.isActive ? "active" : "inactive" } }}</script>
:class
綁定了一個(gè)三元表達(dá)式和一個(gè)方法的返回值,這兩個(gè)值都可以被作為class
屬性的值。v-bind:
或簡(jiǎn)寫(xiě)的:
,但是在綁定事件時(shí),必須使用v-on:
或簡(jiǎn)寫(xiě)的@
。例如: ?<script>export default { methods: { handleClick() { console.log("clicked") } }}</script>
@click
綁定了一個(gè)handleClick
方法,這個(gè)方法會(huì)在按鈕被點(diǎn)擊時(shí)被調(diào)用。v-if
和v-else
指令來(lái)控制元素的顯示和隱藏。
show
的值來(lái)決定顯示哪個(gè)v-if
和v-else
,還有v-else-if
可以用來(lái)實(shí)現(xiàn)多個(gè)條件的判斷。
type
的值來(lái)決定顯示哪個(gè)v-if
是惰性的,只有當(dāng)條件為真時(shí)才會(huì)渲染元素,否則不會(huì)渲染。而v-show
則是直接控制元素的顯示和隱藏,不管條件是否為真,元素都會(huì)被渲染,只是樣式被設(shè)置為display: none
。v-for
指令來(lái)遍歷數(shù)組或?qū)ο螅⑸蓪?duì)應(yīng)的元素。
?<script>export default { data() { return { list: ["item1", "item2", "item3"] } }}</script>v-for
指令遍歷list
數(shù)組,并生成對(duì)應(yīng)的元素。
?<script>export default { data() { return { obj: { key1: "value1", key2: "value2", key3: "value3" } } }}</script>v-for
指令遍歷obj
對(duì)象,并生成對(duì)應(yīng)的元素。
v-for
都需要指定一個(gè)唯一的key
屬性,用來(lái)標(biāo)識(shí)每個(gè)元素的唯一性,以便在更新時(shí)能夠正確地識(shí)別每個(gè)元素。key
屬性可以管理組件或元素的狀態(tài)。當(dāng)一個(gè)組件或元素的key
屬性發(fā)生變化時(shí),Vue會(huì)認(rèn)為它是一個(gè)不同的組件或元素,從而重新渲染它。
key
屬性來(lái)管理show
變量的值發(fā)生變化時(shí),key
屬性也會(huì)發(fā)生變化,從而重新渲染key
屬性的值必須是唯一的,不能重復(fù)。如果重復(fù)了,會(huì)導(dǎo)致Vue無(wú)法正確地識(shí)別每個(gè)組件或元素的狀態(tài),從而導(dǎo)致渲染錯(cuò)誤。@
或v-on
指令來(lái)綁定事件。不同之處在于,Vue3中取消了.sync
修飾符,同時(shí)提供了新的修飾符和事件API。@
或v-on
指令來(lái)綁定事件,語(yǔ)法與Vue2相同。示例如下: <script>export default { methods: { handleClick() { console.log("Button clicked!") } }}</script>
@click
指令來(lái)綁定handleClick
方法,當(dāng)按鈕被點(diǎn)擊時(shí),會(huì)觸發(fā)handleClick
方法。.stop
、.prevent
、.capture
、.self
、.once
和.passive
。示例如下:
.stop
修飾符來(lái)阻止事件冒泡,當(dāng)div
元素被點(diǎn)擊時(shí),不會(huì)觸發(fā)其父元素的點(diǎn)擊事件。 ?<script>export default { data() { return { eventName: "click" } }, methods: { handleClick() { console.log("Button clicked!") } }}</script>
@[eventName]
指令來(lái)綁定動(dòng)態(tài)事件名,事件名為eventName
的值。createApp
方法的provide
和inject
選項(xiàng)來(lái)實(shí)現(xiàn)自定義事件的傳遞。示例如下:// App.vue ?<script>import { provide } from "vue"import EventBus from "./EventBus"?export default { setup() { provide("eventBus", EventBus) }, methods: { handleClick() { EventBus.emit("customEvent", "Hello, Vue3!") } }}</script>?// EventBus.jsimport mitt from "mitt"?const EventBus = mitt()?export default EventBus?// ChildComponent.vue
provide
方法將事件總線(xiàn)對(duì)象EventBus
注入到根組件中,然后在子組件中使用inject
方法獲取事件總線(xiàn)對(duì)象,并通過(guò)on
方法監(jiān)聽(tīng)自定義事件customEvent
,當(dāng)事件觸發(fā)時(shí),更新message
的值。$event
來(lái)傳遞事件對(duì)象,也可以使用函數(shù)來(lái)傳遞自定義參數(shù)。
$event
來(lái)傳遞事件對(duì)象,使用"參數(shù)"
來(lái)傳遞自定義參數(shù)。
.修飾符
的方式來(lái)使用事件修飾符。.stop
:阻止事件冒泡.prevent
:阻止事件默認(rèn)行為.capture
:使用事件捕獲模式.self
:只在事件目標(biāo)自身觸發(fā)時(shí)觸發(fā)事件.once
:只觸發(fā)一次事件.passive
:告訴瀏覽器該事件不會(huì)調(diào)用preventDefault()
方法,可以?xún)?yōu)化頁(yè)面滾動(dòng)性能 ?<script>export default { methods: { handleClick() { console.log("點(diǎn)擊事件") }, handleScroll() { console.log("滾動(dòng)事件") } }}</script>
.stop
修飾符來(lái)阻止事件冒泡,使用.prevent
修飾符來(lái)阻止事件默認(rèn)行為,使用.capture
修飾符來(lái)使用事件捕獲模式,使用.self
修飾符來(lái)只在事件目標(biāo)自身觸發(fā)時(shí)觸發(fā)事件,使用.once
修飾符來(lái)只觸發(fā)一次事件,使用.passive
修飾符來(lái)告訴瀏覽器該事件不會(huì)調(diào)用preventDefault()
方法,可以?xún)?yōu)化頁(yè)面滾動(dòng)性能。computed
選項(xiàng)中定義計(jì)算屬性來(lái)計(jì)算和緩存值。
computed
選項(xiàng)來(lái)定義計(jì)算屬性quantity
和totalPrice
,分別計(jì)算商品數(shù)量和商品總價(jià)。{{ quantity }}
和{{ totalPrice }}
。
totalPrice
返回一個(gè)函數(shù),這個(gè)函數(shù)會(huì)動(dòng)態(tài)計(jì)算商品總價(jià),考慮到折扣可能會(huì)變化,因此需要?jiǎng)討B(tài)計(jì)算商品總價(jià)。v-bind:class
指令來(lái)綁定一個(gè)對(duì)象或數(shù)組來(lái)動(dòng)態(tài)地設(shè)置一個(gè)元素的class屬性。
:class
指令來(lái)綁定一個(gè)對(duì)象,這個(gè)對(duì)象的屬性名是class名稱(chēng),屬性值是一個(gè)布爾值,表示是否應(yīng)用這個(gè)class。在這個(gè)示例中,如果isActive
為true
,則會(huì)應(yīng)用active
這個(gè)class,如果hasError
為true
,則會(huì)應(yīng)用text-danger
這個(gè)class。
:class
指令來(lái)綁定一個(gè)數(shù)組,這個(gè)數(shù)組的元素可以是字符串或?qū)ο蟆H绻麛?shù)組元素是字符串,則表示應(yīng)用這個(gè)class;如果數(shù)組元素是對(duì)象,則表示應(yīng)用這個(gè)對(duì)象中的class。isActive
為true
,則會(huì)應(yīng)用active
這個(gè)class,如果errorClass
為text-danger
,則會(huì)應(yīng)用text-danger
這個(gè)class。
元素和is
特性來(lái)實(shí)現(xiàn)。示例代碼如下:
元素和is
特性來(lái)動(dòng)態(tài)渲染不同的組件。在這個(gè)示例中,點(diǎn)擊ComponentA
按鈕會(huì)渲染ComponentA
組件,點(diǎn)擊ComponentB
按鈕會(huì)渲染ComponentB
組件。v-bind
指令或簡(jiǎn)寫(xiě)的:
來(lái)動(dòng)態(tài)綁定樣式。
:style
指令來(lái)綁定color
樣式,樣式的值為textColor
的值。
:style
指令來(lái)綁定color
和fontSize
兩個(gè)樣式,樣式的值分別為textColor
和fontSize
的值。
:style
指令來(lái)綁定baseStyles
和customStyles
兩個(gè)樣式對(duì)象,樣式的值為兩個(gè)對(duì)象的合并結(jié)果。
computedStyles
來(lái)動(dòng)態(tài)綁定樣式對(duì)象,樣式的值為計(jì)算屬性的返回值。
資訊
1-4月我國(guó)互聯(lián)網(wǎng)業(yè)務(wù)收入是多少?同比有增長(zhǎng)嗎?
工信微報(bào):2023年1—4月互聯(lián)網(wǎng)和相...
十銓科技首次使用120mm一體式水冷了嗎?你知道具體參數(shù)嗎?
十銓首次使用120mm一體式水冷,純...
NVIDIA將推出Neuralangelo模型了嗎?你知道嗎?
NVIDIA發(fā)布新模型:將視頻內(nèi)容轉(zhuǎn)為...
聯(lián)發(fā)科確認(rèn)天璣9300處理器架構(gòu)了嗎?你知道嗎?
聯(lián)發(fā)科確認(rèn)下一代天璣9300處理器將...
文章排行
圖賞
挨組什么詞和拼音(挨組詞3個(gè))
想必現(xiàn)在有很多小伙伴對(duì)于挨組詞3...
龍鳳光明社區(qū)?助力高考,這幾天請(qǐng)盡量“靜悄悄”
活動(dòng)現(xiàn)場(chǎng),網(wǎng)格員將一個(gè)個(gè)文具袋發(fā)...
前世今生電視劇歌曲_前世今生 劉濟(jì)愷、默默演唱的歌曲
1、《前世今生》是2010年7月電影《...
最新快訊!三星財(cái)險(xiǎn)騰訊基因再被強(qiáng)化,距離突破瓶頸還有多遠(yuǎn)?
作者:宋涵出品:全球財(cái)說(shuō)繼流量“...