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