Vue3中的setup函數(shù)和響應(yīng)式ref reactive

在之前的文章中,小編和大家一起學(xué)習(xí)了關(guān)于Vue的基本語法和概念阿迈,包括組件、數(shù)據(jù)混入和插槽等轧叽。從今天開始苗沧,小編和大家一起學(xué)習(xí)Vue3中的新特性,也就是網(wǎng)上炒的鋪天蓋地的Composition-API炭晒,看看到底有什么神奇之處待逞,我們之前通過Vue寫的代碼,基本都是這樣网严。大家還可以關(guān)注我的微信公眾號识樱,蝸牛全棧。

Vue.createApp({
    data(){
        return {
            name:"" // 綁定基本數(shù)據(jù)類型數(shù)據(jù)
            items:[1,2,3,4] // 綁定引用數(shù)據(jù)類型
        }
    },
    methods:{
        handleClick(){ // 綁定按鈕的點擊函數(shù)
            this.name = 'lilei'
            this.items.push(5)
        }
    },
    template:`
        <div>
            <input v-model="name" />
            <button @click="handleClick">增加</button>
            <ul>
                <li v-for="(item,index) of items" :key="index">{{item}}</li> 
            </ul>
        </div>
        `
}).mount('#root')

同樣的代碼震束,改造成setup函數(shù)的形式怜庸,就是這樣

Vue.createApp({
    template: `<div>
            <input v-model="name" />
            <button @click="handleClick">增加</button>
            <ul>
                <li v-for="(item,index) of items" :key="index">{{item}}</li> 
            </ul>
        </div>`,
    setup(){
        let name=""
        let items = [1,2,3,4]
        const handleClick = () => {
          name = 'lilei'
          items.push(5)
        }
        return {
          name,
          items
        }
    }
}).mount('#root')

這個時候我們發(fā)現(xiàn),不僅按鈕點擊事件不好用了垢村,甚至控制臺也會出現(xiàn)警告割疾,handleClick方法沒有被注冊,實際上這正是小編要和大家分享的三個點
一嘉栓、控制臺出現(xiàn)的警告是因為在setup函數(shù)中沒有返回對應(yīng)的函數(shù)宏榕,在頁面中使用的變量和函數(shù),都需要在return的對象中侵佃,才能使用麻昼,至于網(wǎng)上說的其他的痛點,比如如何獲取this還有組件之間傳值馋辈,小編會在接下來的內(nèi)容中相繼更新抚芦。為了修復(fù)控制臺的錯誤,我們可以把代碼完善成這樣

Vue.createApp({
    template: `<div>
            <input v-model="name" />
            <button @click="handleClick">增加</button>
            <ul>
                <li v-for="(item,index) of items" :key="index">{{item}}</li> 
            </ul>
        </div>`,
    setup(){
        let name=""
        let items = [1,2,3,4]
        const handleClick = () => {
          name = 'lilei'
          items.push(5)
        }
        return {
          name,
          items,
          handleClick
        }
    }
}).mount('#root')

經(jīng)過上面的改動,我們發(fā)現(xiàn)控制臺的錯誤是不見了燕垃,但是點擊按鈕依然沒有反應(yīng)枢劝,這個時候我們需要引入setup函數(shù)中對于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的綁定方式
二、基礎(chǔ)數(shù)據(jù)類型響應(yīng)式引用——ref

Vue.createApp({
    template: `<div>
            <input v-model="name" />
            <button @click="handleClick">增加</button>
            <ul>
                <li v-for="(item,index) of items" :key="index">{{item}}</li> 
            </ul>
        </div>`,
    setup(){
        // 通過數(shù)據(jù)解構(gòu)的方式引入ref
        let { ref } = Vue 
        // ref 處理基礎(chǔ)類型的數(shù)據(jù)
        // proxy 'lilei'變成 proxy({value:'lilei'})這樣的一個響應(yīng)式引用
        let name=ref("")
        let items = [1,2,3,4]
        const handleClick = () => {
          // name = 'lilei'
          name.value = 'lilei' // 引入ref之后卜壕,數(shù)據(jù)格式發(fā)生改變您旁,修改內(nèi)容的時候,也要相應(yīng)的調(diào)整
          items.push(5)
        }
        return {
          name,
          items,
          handleClick
        }
    }
}).mount('#root')

三轴捎、引用數(shù)據(jù)類型響應(yīng)式引用——reactive

Vue.createApp({
    template: `<div>
            <input v-model="name" />
            <button @click="handleClick">增加</button>
            <ul>
                <li v-for="(item,index) of items" :key="index">{{item}}</li> 
            </ul>
        </div>`,
    setup(){
        // 通過數(shù)據(jù)解構(gòu)的方式引入reactive
        let { ref,reactive } = Vue 
        // reactive 處理非基礎(chǔ)類型的數(shù)據(jù)鹤盒,常見的有Array和Object類型
        // proxy [1,2,3,4]變成 proxy([1,2,3,4])這樣的一個響應(yīng)式引用
        let name=ref("")
        let items = reactive([1,2,3,4])
        const handleClick = () => {
          // name = 'lilei'
          name.value = 'lilei' // 引入ref之后,數(shù)據(jù)格式發(fā)生改變侦副,修改內(nèi)容的時候侦锯,也要相應(yīng)的調(diào)整
          items.push(5)
        }
        return {
          name,
          items,
          handleClick
        }
    }
}).mount('#root')

至此,我們完成了一個從“傳統(tǒng)”Vue寫法秦驯,轉(zhuǎn)向了Vue3中Composition-API的寫法尺碰,在代碼中還是有一些痛點,這個小編會在后續(xù)的文章中持續(xù)更新译隘。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亲桥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子固耘,更是在濱河造成了極大的恐慌题篷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厅目,死亡現(xiàn)場離奇詭異番枚,居然都是意外死亡,警方通過查閱死者的電腦和手機损敷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門葫笼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拗馒,你說我怎么就攤上這事路星。” “怎么了瘟忱?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵奥额,是天一觀的道長苫幢。 經(jīng)常有香客問我访诱,道長,這世上最難降的妖魔是什么韩肝? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任触菜,我火速辦了婚禮,結(jié)果婚禮上哀峻,老公的妹妹穿的比我還像新娘涡相。我一直安慰自己哲泊,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布催蝗。 她就那樣靜靜地躺著切威,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丙号。 梳的紋絲不亂的頭發(fā)上先朦,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音犬缨,去河邊找鬼喳魏。 笑死,一個胖子當著我的面吹牛怀薛,可吹牛的內(nèi)容都是我干的刺彩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼枝恋,長吁一口氣:“原來是場噩夢啊……” “哼创倔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鼓择,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤三幻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呐能,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體念搬,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年摆出,在試婚紗的時候發(fā)現(xiàn)自己被綠了朗徊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡偎漫,死狀恐怖爷恳,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情象踊,我是刑警寧澤温亲,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站杯矩,受9級特大地震影響栈虚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜史隆,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一魂务、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦鬓照、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至号显,卻和暖如春留储,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咙轩。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工获讳, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人活喊。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓丐膝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钾菊。 傳聞我的和親對象是個殘疾皇子帅矗,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

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