3分鐘帶你體驗Vue3.0

最近劲赠,Vue官方發(fā)布了 Composition API RFC。有關(guān)于Vue3.0 Function Base組件相關(guān)討論正如火如荼橄仍。雖然Vue3.0還未發(fā)布诬垂,但是 Vue官方發(fā)布了關(guān)于 Composition API的官方插件,使廣大用戶可以在Vue2.x中享受 Function Base 帶來的新體驗慷彤。下面我會在一個簡單的demo中介紹Composition API使用方法娄蔼。

安裝和使用

yarn add @vue/composition-api

等待composition-api包安裝完成后,我們在項目入口文件中加入Composition API底哗。

import Vue from "vue"
import CompositionApi from "@vue/composition-api"
Vue.use(CompositionApi)

setup函數(shù)

按照官方給出的說法岁诉,setup函數(shù)是一個新的Vue組件選項,是用于在組件中使用Composition API的入口跋选。

setup函數(shù)在組件初始化了props之后涕癣,created之前調(diào)用,這時候我們才能通過setup來傳遞props野建。

綁定數(shù)據(jù)(data)

reactive函數(shù)接受一個對象属划,并返回該對象的代理,通過reactive這種方式我們可以綁定代理對象候生。

import {reactive} from "@vue/composition-api"
export default {
    setup(props) {
        let vue = react({version:'2.x'})
        vue.version = '3.x'
    }
    return {
        vue
    }
}

ref是CompositionAPI引入的新概念同眯。作用是使訪問響應(yīng)式的變量不依賴于實例的this。如果使用了ref唯鸭,我們訪問響應(yīng)式的變量時使用.value而不是從this中獲取,其底層是采用reactive方法實現(xiàn)须蜗。

import {ref} from "@vue/composition-api"
export default {
    setup() {
        const count = ref(0)//count初始值為0,會相應(yīng)變化
        count.value = 10;//設(shè)置count值為10,使用.value形式
        return {
            count//必須將count return 回去
        }
    }
}

綁定生命周期函數(shù)

可以使用導(dǎo)入的onXXX的形式注冊生命周期函數(shù)明肮,舉個例子:

import {onCreated,onMounted} from "@vue/composition-apai"
export default {
    setup() {
        onMounted(()=>{
            console.log('mounted被觸發(fā)')
        })
        ///...其他類似
    }
}

注意:以下生命周期函數(shù)用setup函數(shù)替代:

  • beforeCreated
  • created

綁定方法(methods)

在Composition API中菱农,我們使用普通的函數(shù)定義方法,這樣可以最大程度的增加復(fù)用性柿估。例如:

<template>
<button @click="add">click me!</button>
</template>
<script>
export default {
    setup() {
        function add() {
            console.log('add被觸發(fā)')
        }
        return {
            add//必須將函數(shù)return
        }
    }
}
</script>

外部屬性(props)

定義props和原來的方式一樣循未,props會通過參數(shù)的形式傳入到setup函數(shù)中:

export default {
    props:{
        name:String
    },
    setup(props) {
        console.log(props.name)
    }
}

計算屬性(computed)

計算屬性可以使用Composition API提供的computed函數(shù)進(jìn)行定義:

import {computed,ref} from "@vue/composition-apai"
export default {
    setup() {
        const a = ref(0)
        const b = ref(1);
        const total = computed(()=>a.value+b.value)
        return {
            a,
            b,
            totla
        }
    }
}

這樣我們就定義好了一個計算屬性totaltotal.value = a.value + b.value秫舌。

偵聽器(watch)

在組件中添加watch監(jiān)聽我們可以采用Composition API提供的watch函數(shù)實現(xiàn):

import {watch,ref} from "@vue/composition-apai"
export default {
    setup() {
        const count = ref(100);
        watch(()=>count.vlaue,()=>{
            console.log('count數(shù)值發(fā)生變化了')
        })
        const.value = 200;
        return {
            count
        }
    }
}

實例屬性($refs)

在Composition API中使用ref特性獲取組件實例或者dom節(jié)點的妖,舉個例子說明:

<template>
<div>
    <hello-world ref="helloWold"></hello-world>
    <button ref="btn"></button>
</div>
</template>
import {ref} from "@vue/composition-api"
export default {
    setup() {
        const helloWorld = ref(null);//helloworld組件實例
        const btn = ref(null);//button dom節(jié)點對象
        return {
            btn,
            helloWorld
        }
    }
}

綜合例子

<template>
    <div>
        <button @click="increment" ref="btn">{{titleCount}}</button>
    </div>
</template>

<script>

import {onMounted,computed,ref,watch} from "@vue/composition-api"
export default {
  props:{
    prefix:String
  },
  setup(props) {
    const btn = ref(null);
    const count = ref(0);
    const title = ref(`${props.prefix},vue composition api`);
    const titleCount = computed(()=>title.value +':'+ count.value)
    onMounted(()=>{
      alert('mounted')
    })
    watch(()=>count.value,()=>alert('count改變了:'+count.value))
    function increment() {
      // eslint-disable-next-line no-console
      count.value++;
      // eslint-disable-next-line no-console
      console.log(btn.value);
    }

    return {
      btn,
      increment,
      title,
      count,
      titleCount
    }
  }
}
</script>

下圖是運(yùn)行效果:

image

總結(jié)

經(jīng)過以上實踐,總結(jié)Composition API以下特點:

優(yōu)點:

  1. 使用簡潔足陨,方便嫂粟,代碼量小
  2. 函數(shù)特性,復(fù)用性強(qiáng)
  3. 容易做類型推導(dǎo)墨缘,方便IDE做出語法提示

缺點:

  1. 需要額外加載composition-api包文件星虹,增加了打包后的文件體積,對網(wǎng)頁性能有一定影響
  2. 增加了一定的學(xué)習(xí)成本
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镊讼,一起剝皮案震驚了整個濱河市宽涌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狠毯,老刑警劉巖护糖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嚼松,居然都是意外死亡嫡良,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門献酗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寝受,“玉大人,你說我怎么就攤上這事罕偎『艹危” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵颜及,是天一觀的道長甩苛。 經(jīng)常有香客問我,道長俏站,這世上最難降的妖魔是什么讯蒲? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮肄扎,結(jié)果婚禮上墨林,老公的妹妹穿的比我還像新娘赁酝。我一直安慰自己,他們只是感情好旭等,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布酌呆。 她就那樣靜靜地躺著,像睡著了一般搔耕。 火紅的嫁衣襯著肌膚如雪隙袁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天度迂,我揣著相機(jī)與錄音藤乙,去河邊找鬼。 笑死惭墓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的而姐。 我是一名探鬼主播腊凶,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拴念!你這毒婦竟也來了钧萍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤政鼠,失蹤者是張志新(化名)和其女友劉穎风瘦,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體公般,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡万搔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了官帘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞬雹。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖刽虹,靈堂內(nèi)的尸體忽然破棺而出酗捌,到底是詐尸還是另有隱情,我是刑警寧澤涌哲,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布胖缤,位于F島的核電站,受9級特大地震影響阀圾,放射性物質(zhì)發(fā)生泄漏哪廓。R本人自食惡果不足惜赶诊,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一目尖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胜卤,春花似錦、人聲如沸综膀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剧劝。三九已至橄登,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間讥此,已是汗流浹背拢锹。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留萄喳,地道東北人卒稳。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像他巨,于是被迫代替她去往敵國和親充坑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

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