成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細教程:在Vue2和Vue3中構建相同的組件

開發 前端
在本文的最后,將介紹Vue2和Vue3之間的主要編程差異,幫助大家了解,逐漸成為更好的開發人員。

過去,我們看過很多重大變革即將到來的文章,但是并沒有真正深入研究代碼將如何變化。

為了展示這些變化,小芯將在Vue2和Vue3中構建一個簡單的表單組件。

在本文的最后,將介紹Vue2和Vue3之間的主要編程差異,幫助大家了解,逐漸成為更好的開發人員。

如果想知道如何建立第一個Vue3應用程序,請查看初學者的Vue3Alpha應用程序指南。

我們開始吧!

[[319932]]

創建模板

對于大多數組件,Vue2和Vue3中的代碼即使不完全相同,也是非常相似的。但是,Vue3支持片段,這意味著組件可以有多個根節點。

這在呈現列表中的組件以刪除不必要的包裝器div元素時特別有用。但是,在本例中,表單組件的兩個版本都將只保留一個根節點。

  1. <template> 
  2.   <div> 
  3.     <h2> {{ title }} </h2> 
  4.     <input type='text'v-model='username' placeholder='Username' /> 
  5.     
  6.     <input type='password'v-model='password' placeholder='Password' /> 
  7.     <button @click='login'> 
  8.       Submit 
  9.     </button> 
  10.     <p> 
  11.       Values: {{ username + ' ' +password }} 
  12.     </p> 
  13.   </div> 
  14. </template> 

 

唯一真正的區別是如何訪問數據。在Vue3中,響應式數據都封裝在一個響應狀態變量中,所以需要訪問這個狀態變量來獲得值。

  1. <template> 
  2.   <div> 
  3.     <h2> {{ state.title }}</h2> 
  4.     <input type='text'v-model='state.username' placeholder='Username' /> 
  5.     
  6.     <input type='password'v-model='state.password' placeholder='Password' /> 
  7.     <button @click='login'> 
  8.       Submit 
  9.     </button> 
  10.     <p> 
  11.       Values: {{ state.username + ' ' +state.password }} 
  12.     </p> 
  13.   </div> 
  14. </template> 

 

設置數據

這就是主要的區別——Vue2選項API對戰Vue3組合API。

選項 API將代碼分成不同的屬性:數據、計算屬性、方法等等。同時,組合API允許根據函數而不是屬性類型對代碼進行分組。

對于表單組件,只有兩個數據屬性:一個username和一個password。

Vue2代碼看起來是這樣的——只需在數據屬性中放入兩個值。

  1. exportdefault { 
  2.   props: { 
  3.     title: String 
  4.   }, 
  5.   data () { 
  6.     return { 
  7.       username: '', 
  8.       password: '' 
  9.     } 
  10.   } 

在Vue3.0中,必須投入更多精力來使用一個新的setup()方法,所有的組件初始化都應該在這個方法中進行。

另外,為了讓開發人員更好地控制響應,可以直接訪問Vue的響應API。

創建響應式數據需要三個步驟:

  • 從vue中導入reactive
  • 使用響應式方法聲明數據
  • 使用setup方法返回響應式數據以便模板可以訪問

代碼看起來有點像這樣。

  1. import {reactive } from 'vue' 
  2.  
  3. export default { 
  4.   props: { 
  5.     title: String 
  6.   }, 
  7.   setup () { 
  8.     const state = reactive({ 
  9.       username: '', 
  10.       password: '' 
  11.     }) 
  12.      
  13.     return { state } 
  14.   } 

接著在模板中,可以使用諸如state.username和state.password來訪問

在Vue2和Vue3中創建方法

Vue2選項API有一個單獨的方法部分。這部分可以定義所有的方法,并以任何想要的方式進行組織。

  1. exportdefault { 
  2.   props: { 
  3.     title: String 
  4.   }, 
  5.   data () { 
  6.     return { 
  7.       username: '', 
  8.       password: '' 
  9.     } 
  10.   }, 
  11.   methods: { 
  12.     login () { 
  13.       // login method 
  14.     } 
  15.   } 

Vue3組合API中的setup方法也可以處理。它的工作原理與聲明數據有些類似——必須先聲明方法,然后返回,以便組件的其他部分可以訪問它。

  1. exportdefault { 
  2.   props: { 
  3.     title: String 
  4.   }, 
  5.   setup () { 
  6.     const state = reactive({ 
  7.       username: '', 
  8.       password: '' 
  9.     }) 
  10.     const login = () => { 
  11.       // login method 
  12.     } 
  13.     return { 
  14.       login, 
  15.       state 
  16.     } 
  17.   } 

生命周期掛鉤

Vue2可以直接從組件選項中訪問生命周期掛鉤。以下示例代碼將等待掛載的事件。

  1. exportdefault { 
  2.   props: { 
  3.     title: String 
  4.   }, 
  5.   data () { 
  6.     return { 
  7.       username: '', 
  8.       password: '' 
  9.     } 
  10.   }, 
  11.   mounted () { 
  12.     console.log('component mounted') 
  13.   }, 
  14.   methods: { 
  15.     login () { 
  16.       // login method 
  17.     } 
  18.   } 

現在有了Vue3 組合API,幾乎所有東西都在setup()方法中,包括掛載的生命周期掛鉤。

然而,生命周期掛鉤在默認情況下并不包括在內,因此必須導入在Vue3中被稱為onmount的方法。這看起來與前面導入reactive是一樣的。

然后,在setup方法中,通過傳遞函數來使用onmount方法。

  1. import {reactive, onMounted } from 'vue' 
  2.  
  3. export default { 
  4.   props: { 
  5.     title: String 
  6.   }, 
  7.   setup () { 
  8.     // .. 
  9.      
  10.     onMounted(() => { 
  11.       console.log('component mounted') 
  12.     }) 
  13.      
  14.     // ... 
  15.   } 

computed屬性

添加一個computed屬性,將用戶名轉換為小寫字母。

為了在Vue2中實現這一點,向選項對象添加一個computed字段。從這里,可以像這樣定義屬性…

  1. exportdefault { 
  2.   // .. 
  3.   computed: { 
  4.     lowerCaseUsername () { 
  5.       return this.username.toLowerCase() 
  6.     } 
  7.   } 

Vue3的設計允許開發人員導入他們使用的東西,并且項目中沒有不必要的包。本質上,他們不希望開發人員包含從未使用過的東西,這而這在Vue2中已經成為一個日益嚴重的問題。

因此,要在Vue3中使用computed屬性,首先必須將computed導入到組件中。

然后,與之前創建響應式數據的方式類似,將一段響應式數據變成一個計算值,如下所示:

  1. import {reactive, onMounted, computed } from 'vue' 
  2.  
  3. export default { 
  4.   props: { 
  5.     title: String 
  6.   }, 
  7.   setup () { 
  8.     const state = reactive({ 
  9.       username: '', 
  10.       password: '', 
  11.       lowerCaseUsername: computed(()=> state.username.toLowerCase()) 
  12.     }) 
  13.      
  14.     // ... 
  15.   } 

訪問Props

訪問道具帶來了Vue2和Vue3之間的一個重要區別——this意味著完全不同的東西。

在Vue2中,this幾乎總是指向組件,而不是特定的屬性。雖然這使事情表面上很容易,但它使類型支持成為一種痛苦。

然而,可以很容易地訪問props——只需添加一個小例子,比如在掛載掛鉤期間打印出title prop:

  1. mounted() { 
  2.     console.log('title: ' + this.title) 

但是在Vue3中不再使用它來訪問props、觸發事件和獲取屬性。相反,setup()方法有兩個參數:

  • props - 對組件props的不可變訪問
  • context - Vue3公開的上下文選擇屬性(emit、slot、attrs)

使用props參數,上面的代碼將如下所示。

  1. mounted() { 
  2.     console.log('title: ' + this.title) 

觸發事件

類似地,在Vue2中觸發事件非常簡單,但是Vue3對如何訪問屬性/方法提供了更多控制。

本例希望在按下“Submit”按鈕時觸發父組件的一個登錄事件。

Vue2代碼只需要調用this.$emit并傳入有效負載對象。

  1. login (){ 
  2.       this.$emit('login', { 
  3.         username: this.username, 
  4.         password: this.password 
  5.       }) 
  6.  } 

然而在Vue3中,this現在含義不同了,得做出一點改變。

幸運的是,文本對象公開了emit,提供了與this.$emit相同的東西

所要做的就是添加context作為setup方法的第二個參數。將對c文本對象進行析構,使代碼更簡潔。

然后,只需調用emit來觸發事件。與前面一樣,emit方法有兩個參數:

  • 事件名稱
  • 與事件一起傳遞的有效負載對象
  1. setup(props, { emit }) { 
  2.     // ... 
  3.    
  4.     const login = () => { 
  5.       emit('login', { 
  6.         username: state.username, 
  7.         password: state.password 
  8.       }) 
  9.     } 
  10.      
  11.     // ... 

Vue2和Vue3的最后代碼

太棒了!已經到了最后階段。

Vue2和Vue3中的所有概念都是相同的,但是訪問屬性的一些方式發生了一點變化。

總的來說,筆者認為Vue3將幫助開發人員編寫更有組織的代碼——特別是在大型代碼庫中。這主要是因為組合API允許根據特定的特性將代碼分組,甚至可以將功能提取到它們自己的文件中,并根據需要將它們導入到組件中。

下面是Vue2中的表單組件代碼。

  1. <template> 
  2.   <div> 
  3.     <h2> {{ title }} </h2> 
  4.     <input type='text'v-model='username' placeholder='Username' /> 
  5.     
  6.     <input type='password'v-model='password' placeholder='Password' /> 
  7.        
  8.     <button @click='login'> 
  9.       Submit 
  10.     </button> 
  11.     <p> 
  12.       Values: {{ username + ' ' +password }} 
  13.     </p> 
  14.   </div> 
  15. </template> 
  16. <script> 
  17. export default { 
  18.   props: { 
  19.     title: String 
  20.   }, 
  21.   data () { 
  22.     return { 
  23.       username: '', 
  24.       password: '' 
  25.     } 
  26.   }, 
  27.   mounted () { 
  28.     console.log('title: ' + this.title) 
  29.   }, 
  30.   computed: { 
  31.     lowerCaseUsername () { 
  32.       return this.username.toLowerCase() 
  33.     } 
  34.   }, 
  35.   methods: { 
  36.     login () { 
  37.       this.$emit('login', { 
  38.         username: this.username, 
  39.         password: this.password 
  40.       }) 
  41.     } 
  42.   } 
  43. </script> 

 

下面是Vue3的。

  1. <template> 
  2.   <div> 
  3.     <h2> {{ state.title }}</h2> 
  4.     <input type='text'v-model='state.username' placeholder='Username' /> 
  5.     
  6.     <input type='password'v-model='state.password' placeholder='Password' /> 
  7.        
  8.     <button @click='login'> 
  9.       Submit 
  10.     </button> 
  11.     <p> 
  12.       Values: {{ state.username + ' ' +state.password }} 
  13.     </p> 
  14.   </div> 
  15. </template> 
  16. <script> 
  17. import { reactive, onMounted, computed } from 'vue' 
  18.  
  19. export default { 
  20.   props: { 
  21.     title: String 
  22.   }, 
  23.   setup (props, { emit }) { 
  24.     const state = reactive({ 
  25.       username: '', 
  26.       password: '', 
  27.       lowerCaseUsername: computed(()=> state.username.toLowerCase()) 
  28.     }) 
  29.      
  30.     onMounted(() => { 
  31.       console.log('title: ' +props.title) 
  32.     }) 
  33.      
  34.     const login = () => { 
  35.       emit('login', { 
  36.         username: state.username, 
  37.         password: state.password 
  38.       }) 
  39.     } 
  40.      
  41.     return { 
  42.       login, 
  43.       state 
  44.     } 
  45.   } 
  46. </script> 

希望本教程能夠幫助了解Vue代碼在Vue3中的一些不同之處。

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2022-06-21 12:09:18

Vue差異

2022-07-18 10:43:12

項目TienChinJava

2021-05-06 07:40:56

Vue3 Vue2 組件

2022-06-29 16:59:21

Vue3Vue2面試

2021-03-22 10:05:25

開源技術 項目

2023-04-28 08:35:22

Vue 3Vue 2

2023-02-23 09:59:52

路由差異Vue

2022-09-20 12:21:25

Vue2Vue3$attrs

2022-11-01 11:55:27

ReactVue3

2023-11-19 18:53:27

Vue2MVVM

2021-12-08 09:09:33

Vue 3 Computed Vue2

2023-11-28 09:03:59

Vue.jsJavaScript

2020-12-01 08:34:31

Vue3組件實踐

2021-12-01 08:11:44

Vue3 插件Vue應用

2022-12-09 09:39:20

Vue3Vue2

2024-04-08 07:28:27

PiniaVue3狀態管理庫

2023-04-27 11:07:24

Setup語法糖Vue3

2022-03-07 11:15:25

Pinia狀態庫vue3

2021-11-30 08:19:43

Vue3 插件Vue應用

2021-06-26 06:29:14

Vue 2Vue 3開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美综合一区 | 欧美日韩国产在线 | 国产精品久久久久久久久免费高清 | 综合色影院 | 欧美一级欧美一级在线播放 | 精品日韩一区二区 | 欧美三级电影在线播放 | 九九色九九 | 少妇精品亚洲一区二区成人 | 色就干| 99re在线视频观看 | 色就干| 国产高清一区 | 亚洲一区二区三区免费视频 | 国产成人网 | 久久久www成人免费精品 | 亚洲另类视频 | www久久久| 国产一区二区三区 | 日韩免费高清视频 | 成人免费精品视频 | 高清视频一区 | 特级黄一级播放 | 国产精品有限公司 | 亚洲精品99 | 久久久xxx| 伊人网伊人网 | 亚洲国产精品一区二区第一页 | 亚洲欧美中文字幕在线观看 | 欧美成人精品一区二区男人看 | 免费一区二区三区 | 午夜网| 国产成人99久久亚洲综合精品 | 日本三级黄视频 | www.日韩| 亚洲在线视频 | 国产精品一区二区久久 | 亚洲欧美日韩系列 | 亚洲精品在线观看网站 | 精品国产乱码久久久久久中文 | 亚洲日本一区二区 |