vue2.0與3.0對(duì)比以及vue3.0 API變化入門

vue3.0已經(jīng)beta版了

image.png

就在昨天尤雨溪發(fā)布了VUE3.0 Beta版本忆某,各路大神也都搶先體驗(yàn)了一波液南!本汪也放下了手上的工作去初步體驗(yàn)了一番。接下來(lái)會(huì)結(jié)合vue2.0和3.0的異同點(diǎn)進(jìn)行介紹

一诵棵、入手第一步

1.首先利用cli3腳手架工具對(duì)項(xiàng)目進(jìn)行初始化两蟀,為了將2個(gè)vue版本進(jìn)行對(duì)比我初始化了2個(gè)項(xiàng)目,分別給文件夾命名為vue2.0和vue3.0,為了方便演示,配置方面我就選擇了Babel碧注。
image.png
初始化完成以后嚣伐,進(jìn)入到根路徑下的package.json文件里,因?yàn)槟壳癱li3.0構(gòu)建的項(xiàng)目仍然是使用vue2.0的版本
image.png
我們現(xiàn)在可以在命令行工具里輸入 vue add vue-next 指令將目前項(xiàng)目的vue版本升級(jí)到3.0 beta版本应闯,當(dāng)配置出現(xiàn)以下內(nèi)容就說(shuō)明安裝成功了
image.png

二纤控、升級(jí)到vue 3.0的變化

首先我們先打開(kāi)main.js文件,會(huì)發(fā)現(xiàn)它與過(guò)去的版本發(fā)生了一些變化:
//vue3.0
import { createApp } from 'vue';
import App from './App.vue'
createApp(App).mount('#app')

//vue2.0
import Vue from 'vue'
import App from './App.vue'
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')

通過(guò)上述的代碼我們會(huì)發(fā)現(xiàn)3.0比2.0的要精簡(jiǎn)了許多碉纺,同時(shí)還引入了一個(gè)新的函數(shù)名createApp,會(huì)把容器掛載到它上面來(lái)船万。

三、進(jìn)入正題

接下來(lái)我會(huì)從以下幾個(gè)屬性及常用的方法骨田,將2.0和3.0進(jìn)行一些對(duì)比:

Data
Method
LifeCycle
Computed
Components

1.Data

export default {
  data(){
    return{

    }
  }
},
///////////////////////
取而代之是使用以下的方式去初始化數(shù)據(jù):
<template>
  <div class="hello">
    123
  </div>
  <div>{{name.name}}</div>
</template>
import {reactive} from 'vue' 
export default {
 setup(){
   const name = reactive({
     name:'hello 番茄'
   })
   return {name}
 }  
}

tip:在新版當(dāng)中setup等效于之前2.0版本當(dāng)中得到beforeCreate,和created耿导,它是在組件初始化的時(shí)候執(zhí)行,甚至是比created更早執(zhí)行态贤。值得注意的是,在3.0當(dāng)中如果你要想使用setup里的數(shù)據(jù)舱呻,你需要將用到值return出來(lái),返回出來(lái)的值在模板當(dāng)中都是可以使用的。
假設(shè)如果你不return出來(lái)箱吕,而直接去使用的話瀏覽器是會(huì)提醒你:

runtime-core.esm-bundler.js?5c40:37 [Vue warn]: Property "name" was accessed during render but is not defined on instance. 
  at <Anonymous>  
  at <Anonymous> (Root)

這個(gè)也是3.0當(dāng)中需要注意的地方芥驳。細(xì)心的朋友應(yīng)該已經(jīng)發(fā)現(xiàn),我在模板里放入2個(gè)子節(jié)點(diǎn),其實(shí)這個(gè)在2.0里是不被允許的,這也是3.0的一項(xiàng)小的改變 reactive是3.0提供的一個(gè)數(shù)據(jù)響應(yīng)的方式茬高,它主要是對(duì)對(duì)象進(jìn)行數(shù)據(jù)響應(yīng)兆旬,接下來(lái)會(huì)介紹另一種數(shù)據(jù)響應(yīng)的方式ref。

2.Method

  <div class="hello">
    <div>{{name.name}}</div>
    <div>{{count}}</div>
    <button @click="increamt">button</button>
  </div>
  
</template>

<script>
import {reactive,ref} from 'vue'
export default {
 setup(){
   const name = reactive({
     name:'王'
   })
   const count=ref(0)
   const increamt=()=>{
     count.value++
   }
   return {name,count,increamt}
 }  
}

在介紹Method的代碼中怎栽,我引用了vue提供的ref新函數(shù)丽猬,它的作用是用來(lái)創(chuàng)建一個(gè)引用值,它主要是對(duì)String,Number,Boolean的數(shù)據(jù)響應(yīng)作引用熏瞄。也許有人會(huì)問(wèn)脚祟,為什么不直接給count賦值,而是采用ref(0)這樣的方式來(lái)創(chuàng)建呢强饮,按我的理解就是由桌,如果直接給count賦值就是等于把這個(gè)值直接拋出去了,就很難在找到它胡陪,而采用ref這種方法等于你在向外拋出去值的是同時(shí)沥寥,你還在它身上牽了一根繩子,方便去追蹤它柠座。
需要注意的時(shí)邑雅,在ref的函數(shù)中,如何你要去改變或者去引用它的值妈经,ref的這個(gè)方法提供了一個(gè)value的返回值淮野,對(duì)值進(jìn)行操作。

image.png

3.LifeCycle(Hooks) 3.0當(dāng)中的生命周期與2.0的生命周期出現(xiàn)了很大的不同:
beforeCreate -> 請(qǐng)使用 setup()

created -> 請(qǐng)使用 setup()

beforeMount -> onBeforeMount

mounted -> onMounted

beforeUpdate -> onBeforeUpdate

updated -> onUpdated

beforeDestroy -> onBeforeUnmount

destroyed -> onUnmounted

errorCaptured -> onErrorCaptured

如果要想在頁(yè)面中使用生命周期函數(shù)的吹泡,根據(jù)以往2.0的操作是直接在頁(yè)面中寫入生命周期骤星,而現(xiàn)在是需要去引用的,這就是為什么3.0能夠?qū)⒋a壓縮到更低的原因爆哑。

import {reactive, ref, onMounted} from 'vue'
export default {
 setup(){
   const name = reactive({
     name:'王'
   })
   const count=ref(0)
   const increamt=()=>{
     count.value++
   }
   onMounted(()=>{
     console.log('123')
   })
   return {name,count,increamt}
 }  

舉個(gè)栗子:

過(guò)去的2.0就像是我們?cè)诓蛷d吃飯洞难,是等菜上齊了我們?cè)匍_(kāi)始吃飯,有的時(shí)候菜點(diǎn)多了就會(huì)造成不必要的浪費(fèi)揭朝。而現(xiàn)在的3.0更像是在吃自助餐队贱,你吃多少就拿多少,就不會(huì)造成浪費(fèi)潭袱。

4.computed

<template>
  <div class="hello">
    <div>{{name.name}}</div>
    <div>{{count}}</div>
    <div>計(jì)算屬性{{computeCount}}</div>
    <button @click="increamt">button</button>

  </div>
  
</template>

<script>
import {reactive, ref, onMounted,computed} from 'vue'
export default {
 setup(){
   const name = reactive({
     name:'王'
   })
   const count=ref(0)
   const increamt=()=>{
     count.value++
   }
   const computeCount=computed(()=>count.value*10)//使用computed記得需要引入柱嫌,這也是剛接觸3.0容易忘記的事情
   onMounted(()=>{
     console.log('123')
   })
   return {name,count,increamt,computeCount}
 }  
}
</script>

下一篇我們來(lái)討論下vue3.0組件的變化和調(diào)用

Props
Emit

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市屯换,隨后出現(xiàn)的幾起案子编丘,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘉抓,死亡現(xiàn)場(chǎng)離奇詭異索守,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)掌眠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門蕾盯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蓝丙,你說(shuō)我怎么就攤上這事⊥希” “怎么了渺尘?”我有些...
    開(kāi)封第一講書人閱讀 165,871評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)说敏。 經(jīng)常有香客問(wèn)我鸥跟,道長(zhǎng),這世上最難降的妖魔是什么盔沫? 我笑而不...
    開(kāi)封第一講書人閱讀 58,963評(píng)論 1 295
  • 正文 為了忘掉前任医咨,我火速辦了婚禮,結(jié)果婚禮上架诞,老公的妹妹穿的比我還像新娘拟淮。我一直安慰自己,他們只是感情好谴忧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布很泊。 她就那樣靜靜地躺著,像睡著了一般沾谓。 火紅的嫁衣襯著肌膚如雪委造。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,763評(píng)論 1 307
  • 那天均驶,我揣著相機(jī)與錄音昏兆,去河邊找鬼。 笑死妇穴,一個(gè)胖子當(dāng)著我的面吹牛爬虱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伟骨,決...
    沈念sama閱讀 40,468評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饮潦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了携狭?” 一聲冷哼從身側(cè)響起继蜡,我...
    開(kāi)封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后稀并,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體仅颇,經(jīng)...
    沈念sama閱讀 45,850評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
  • 正文 我和宋清朗相戀三年碘举,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忘瓦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡引颈,死狀恐怖耕皮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蝙场,我是刑警寧澤凌停,帶...
    沈念sama閱讀 35,823評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站售滤,受9級(jí)特大地震影響罚拟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜完箩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
  • 文/蒙蒙 一赐俗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弊知,春花似錦阻逮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,026評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至呐舔,卻和暖如春币励,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背珊拼。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,150評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工食呻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澎现。 一個(gè)月前我還...
    沈念sama閱讀 48,415評(píng)論 3 373
  • 正文 我出身青樓仅胞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剑辫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子干旧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容