vue3.0 Composition API 上手初體驗 神奇的 setup 函數 (一) 響應數據的綁定

vue3.0 Composition API 上手初體驗 神奇的 setup 函數 (一) 響應數據的綁定

從網上大家對於 vue 3.0 的最大的變化,就是 Vue Composition API 的看法來說,兩極分化比較嚴重。一種是認爲這種寫法實在太優秀了,很好,很喜歡。另外一種則認爲變得沒有以前那麼清晰了,增加了學習成本。

那麼我是怎麼認爲的呢?當然是第一種想法啊!你可知道,曾經我一度感覺到 vue 的語法實在是太過於變態,進而放棄使用 react 開發一年有餘。後來因爲來上海,入職的公司都是 vue 項目,故而我又開始了 vue 代碼的編寫。

但是,說實話,對於原來的 vue 的語法,我個人還是比較崩潰的。比如令人無法理解的 this,你別問,用就對了!

當然,還是有很多人喜歡 vue 的各種語法糖的,比如 v-for \ v-model 之類的。我個人表示這些確實降低了開發難度,但也確實變得更加費解。不過,語法糖這事兒,用着用着,就感覺,真爽。所謂嘴上不想要,身體還是很誠實的。

寫一個簡單的 setup 函數

我們編輯我們項目中的 src/views/Home.vue 文件,改成一下代碼:

<template>
  <router-link to="/about">點這裏去關於我們頁面</router-link>
  <div class="home">
    這裏是一個計數器 >>> <span class="red">{{count}}</span> <br>
    <button @click="countAdd">{{btnText}}</button>
  </div>
</template>

<script>
// ref 是 vue 3.0 的一個重大變化,其作用爲創建響應式的值
import { ref } from 'vue'
// 導出依然是個對象,不過對象中只有一個 setup 函數
export default {
  setup () {
    // 定義一個不需要改變的數據
    const btnText = '點這個按鈕上面的數字會變'
    // 定義一個 count 的響應式數據,並賦值爲 0
    const count = ref(0)
    // 定義一個函數,修改 count 的值。
    const countAdd = () => {
      count.value++
    }
    // 導出一些內容給上面的模板區域使用
    return {
      btnText,
      count,
      countAdd
    }
  }
}
</script>
<style lang="scss">
.home {
  line-height: 2;
  .red {
    color: red;
  }
}
</style>

我們把項目跑起來看看結果,如下圖所示:

當然,點擊按鈕,數字肯定是會相加的。這裏就不截圖了。

劃重點

首先,我們的組件不用寫一堆東西了,只需要一個 setup 函數即可。

這樣做得好處就是,我們可以把很多零碎的東西拆成公共組件,然後交給其他組件去調用。我寫 vue 有一個痛苦的點就是很多的東西我想抽離成組件,但是一拆,就得有 data (), methods 等等一堆。因此,有時候就偷懶,懶得拆了。

現在好了,可以一個函數就是一個組件,多方便啊!

其次,在 setup 函數中 return 出去的東西,可以在模板區域直接使用,也不必理會 this 這個神奇的東西。

然後就是 ref 這個函數,我們可以從 vue 中引入它,它傳入一個值作爲參數,返回一個基於該值的 響應式 Ref 對象,該對象中的值一旦被改變和訪問,都會被跟蹤到,通過修改 count.value 的值,可以觸發模板的重新渲染,顯示最新的值。

我們在控制檯打印 count,如下圖,我們可以看到它的結構,如下圖所示:

vue 3.0 封裝得很好,我們在模板區域,只要使用 count 就可以顯示它的值了,不需要使用 count.value。當然,我們修改這個值,還是需要在 js 中使用 count.value 的。

好,消化一下,下一講,我們來說說如何搞一個響應式的對象數據。

本文由 FungLeo 原創,允許轉載,但轉載必須保留首發鏈接。


《vue3.0 Composition API 上手初體驗》 文章目錄地址: https://blog.csdn.net/fungleo/category_10020552.html 我會不定期的補充一些相關內容,歡迎關注訂閱!

文章代碼倉庫 https://github.com/fengcms/vue3-demo 會用 git 的朋友,可以去直接下載我的代碼。當然,給我點個 star 啥的,也不是不可以的哈!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章