您的位置:首頁 >熱訊 > 觀察 >

Vue3從入門到精通(一) 環球觀天下

Vue3簡介

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關鍵字,例如:

?<script>export default {  data() {    return {      message: "Hello World"    }  },  computed: {    reversedMessage() {      return this.message.split("").reverse().join("")    }  }}</script>

監聽器

Vue3的監聽器使用watch關鍵字,例如:

?<script>export default {  data() {    return {      message: "Hello World"    }  },  watch: {    message(newValue, oldValue) {      console.log(newValue, oldValue)    }  }}</script>

生命周期

Vue3的生命周期與Vue2基本相同,但是使用了新的API。例如:

?<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 屬性綁定

在Vue3中,屬性綁定使用v-bind:或簡寫的:,例如:

?<script>export default {  data() {    return {      className: "red"    }  }}</script>

上面的代碼中,:class綁定了一個名為className的data屬性,這個屬性的值為"red",所以

元素會被添加一個class屬性,值為"red"。

除了綁定data屬性,還可以綁定表達式、計算屬性、甚至是方法的返回值。例如:

?<script>export default {  data() {    return {      isActive: true    }  },  methods: {    getClass() {      return this.isActive ? "active" : "inactive"    }  }}</script>

上面的代碼中,:class綁定了一個三元表達式和一個方法的返回值,這兩個值都可以被作為class屬性的值。

需要注意的是,在Vue3中,綁定屬性時,可以使用v-bind:或簡寫的:,但是在綁定事件時,必須使用v-on:或簡寫的@。例如:

?<script>export default {  methods: {    handleClick() {      console.log("clicked")    }  }}</script>

上面的代碼中,@click綁定了一個handleClick方法,這個方法會在按鈕被點擊時被調用。

vue3 條件渲染

Vue3中的條件渲染和Vue2類似,使用v-ifv-else指令來控制元素的顯示和隱藏。

示例代碼如下:

?<script>export default {  data() {    return {      show: true    }  }}</script>

上面的代碼中,根據show的值來決定顯示哪個

元素。

除了v-ifv-else,還有v-else-if可以用來實現多個條件的判斷。

示例代碼如下:

?<script>export default {  data() {    return {      type: "B"    }  }}</script>

上面的代碼中,根據type的值來決定顯示哪個

元素。

需要注意的是,v-if是惰性的,只有當條件為真時才會渲染元素,否則不會渲染。而v-show則是直接控制元素的顯示和隱藏,不管條件是否為真,元素都會被渲染,只是樣式被設置為display: none。

vue3 列表渲染

Vue3中的列表渲染和Vue2類似,使用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屬性,用來標識每個元素的唯一性,以便在更新時能夠正確地識別每個元素。

    vue3 通過key管理狀態

    在Vue3中,通過key屬性可以管理組件或元素的狀態。當一個組件或元素的key屬性發生變化時,Vue會認為它是一個不同的組件或元素,從而重新渲染它。

    示例代碼如下:

    ?<script>export default {  data() {    return {      show: true    }  },  methods: {    toggle() {      this.show = !this.show    }  }}</script>

    上面的代碼中,使用key屬性來管理

    元素的狀態。當show變量的值發生變化時,
    元素的key屬性也會發生變化,從而重新渲染
    元素。

    需要注意的是,key屬性的值必須是唯一的,不能重復。如果重復了,會導致Vue無法正確地識別每個組件或元素的狀態,從而導致渲染錯誤。

    vue3 事件處理

    在Vue3中,事件處理的方式與Vue2相似,可以使用@v-on指令來綁定事件。不同之處在于,Vue3中取消了.sync修飾符,同時提供了新的修飾符和事件API。

    綁定事件

    可以使用@v-on指令來綁定事件,語法與Vue2相同。示例如下:

    <script>export default {  methods: {    handleClick() {      console.log("Button clicked!")    }  }}</script>

    上面的代碼中,使用@click指令來綁定handleClick方法,當按鈕被點擊時,會觸發handleClick方法。

    事件修飾符

    Vue3中提供了新的事件修飾符,包括.stop、.prevent、.capture、.self、.once.passive。示例如下:

    <script>export default {  methods: {    handleClick() {      console.log("Div clicked!")    }  }}</script>

    上面的代碼中,使用.stop修飾符來阻止事件冒泡,當div元素被點擊時,不會觸發其父元素的點擊事件。

    動態事件名

    在Vue3中,可以使用方括號來綁定動態事件名。示例如下:

    ?<script>export default {  data() {    return {      eventName: "click"    }  },  methods: {    handleClick() {      console.log("Button clicked!")    }  }}</script>

    上面的代碼中,使用@[eventName]指令來綁定動態事件名,事件名為eventName的值。

    自定義事件

    在Vue3中,可以使用createApp方法的provideinject選項來實現自定義事件的傳遞。示例如下:

    // 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?<script>import { inject } from "vue"?export default {  setup() {    const eventBus = inject("eventBus")    const message = ref("")?    eventBus.on("customEvent", (data) => {      message.value = data    })?    return {      message    }  }}</script>

    上面的代碼中,使用provide方法將事件總線對象EventBus注入到根組件中,然后在子組件中使用inject方法獲取事件總線對象,并通過on方法監聽自定義事件customEvent,當事件觸發時,更新message的值。

    vue3 事件傳參

    在Vue3中,事件傳參的方式和Vue2基本相同,可以使用$event來傳遞事件對象,也可以使用函數來傳遞自定義參數。

    示例代碼如下:

    ?<script>export default {  methods: {    handleClick(event, arg) {      console.log(event) // 輸出事件對象      console.log(arg) // 輸出自定義參數    }  }}</script>

    上面的代碼中,使用$event來傳遞事件對象,使用"參數"來傳遞自定義參數。

    另外,如果需要在事件處理函數中訪問組件實例,可以使用箭頭函數來綁定作用域,例如:

    ?<script>export default {  methods: {    handleClick(arg) {      console.log(this) // 輸出組件實例      console.log(arg) // 輸出自定義參數    }  }}</script>

    上面的代碼中,使用箭頭函數來綁定作用域,從而在事件處理函數中訪問組件實例。

    vue3 事件修飾符

    在Vue3中,事件修飾符的使用方式和Vue2基本相同,可以通過在事件名后面添加.修飾符的方式來使用事件修飾符。

    常用的事件修飾符包括:

    .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()方法,可以優化頁面滾動性能。

    vue3 計算屬性

    在Vue3中,計算屬性的使用方式和Vue2基本相同,可以通過在組件的computed選項中定義計算屬性來計算和緩存值。

    示例代碼如下:

    ?<script>export default {  data() {    return {      price: 10,      count: 2    }  },  computed: {    quantity() {      return this.count    },    totalPrice() {      return this.price * this.count    }  }}</script>

    上面的代碼中,使用computed選項來定義計算屬性quantitytotalPrice,分別計算商品數量和商品總價。

    在模板中,可以像訪問普通屬性一樣訪問計算屬性,例如{{ quantity }}{{ totalPrice }}。

    需要注意的是,在Vue3中,計算屬性的返回值可以是一個函數,這樣可以實現動態計算屬性。示例代碼如下:

    ?<script>export default {  data() {    return {      price: 10,      count: 2,      discount: 0.8    }  },  computed: {    quantity() {      return this.count    },    totalPrice() {      return () => this.price * this.count * this.discount    }  }}</script>

    上面的代碼中,計算屬性totalPrice返回一個函數,這個函數會動態計算商品總價,考慮到折扣可能會變化,因此需要動態計算商品總價。

    vue3 class綁定

    在Vue3中,可以使用v-bind:class指令來綁定一個對象或數組來動態地設置一個元素的class屬性。

    下面是使用對象語法綁定class的示例代碼:

    ?<script>export default {  data() {    return {      isActive: true,      hasError: false    }  }}</script>

    上面的代碼中,使用:class指令來綁定一個對象,這個對象的屬性名是class名稱,屬性值是一個布爾值,表示是否應用這個class。在這個示例中,如果isActivetrue,則會應用active這個class,如果hasErrortrue,則會應用text-danger這個class。

    下面是使用數組語法綁定class的示例代碼:

    ?<script>export default {  data() {    return {      isActive: true,      errorClass: "text-danger"    }  }}</script>

    上面的代碼中,使用:class指令來綁定一個數組,這個數組的元素可以是字符串或對象。如果數組元素是字符串,則表示應用這個class;如果數組元素是對象,則表示應用這個對象中的class。

    在這個示例中,如果isActivetrue,則會應用active這個class,如果errorClasstext-danger,則會應用text-danger這個class。

    需要注意的是,在Vue3中,可以使用動態組件來動態渲染不同的組件,這個功能可以使用元素和is特性來實現。示例代碼如下:

    ?<script>import ComponentA from "./ComponentA.vue"import ComponentB from "./ComponentB.vue"?export default {  components: {    ComponentA,    ComponentB  },  data() {    return {      currentComponent: "ComponentA"    }  }}</script>

    上面的代碼中,使用元素和is特性來動態渲染不同的組件。在這個示例中,點擊ComponentA按鈕會渲染ComponentA組件,點擊ComponentB按鈕會渲染ComponentB組件。

    vue3 style 綁定

    在Vue3中,可以使用v-bind指令或簡寫的:來動態綁定樣式。

    綁定單個樣式

    可以使用對象語法來綁定單個樣式,對象的屬性名為樣式名,屬性值為樣式值。示例如下:

    ?<script>export default {  data() {    return {      textColor: "red"    }  }}</script>

    上面的代碼中,使用:style指令來綁定color樣式,樣式的值為textColor的值。

    綁定多個樣式

    可以使用對象語法來綁定多個樣式,對象的屬性名為樣式名,屬性值為樣式值。示例如下:

    ?<script>export default {  data() {    return {      textColor: "red",      fontSize: 16    }  }}</script>

    上面的代碼中,使用:style指令來綁定colorfontSize兩個樣式,樣式的值分別為textColorfontSize的值。

    綁定樣式數組

    可以使用數組語法來綁定多個樣式,數組中的元素為樣式對象。示例如下:

    ?<script>export default {  data() {    return {      baseStyles: {        color: "red",        fontSize: "16px"      },      customStyles: {        fontWeight: "bold"      }    }  }}</script>

    上面的代碼中,使用:style指令來綁定baseStylescustomStyles兩個樣式對象,樣式的值為兩個對象的合并結果。

    綁定樣式對象

    可以使用計算屬性來動態綁定樣式對象。示例如下:

    ?<script>export default {  data() {    return {      textColor: "red",      fontSize: 16    }  },  computed: {    computedStyles() {      return {        color: this.textColor,        fontSize: this.fontSize + "px"      }    }  }}</script>

    上面的代碼中,使用計算屬性computedStyles來動態綁定樣式對象,樣式的值為計算屬性的返回值。

    關鍵詞:

    資訊

    圖賞

  • 在线看成人片,性感美女在线,91视频在线看,青柠电影在线看