<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在react推出了hook之後,vue也在vue3裡面新增了組合式API,鑑於這個時間間隔,我有理由認為組合式api和hook還是有一些關係的。不過在我具體的使用中,我並沒發現這兩個方法太多的相同點,不過鑑於vue自動釋出之後就與react之間那剪不斷理還亂的量子力學關係,估計會有很多人會問及這倆之間的異同。我還沒到能分辨出異同的地步,就簡單的介紹一下vue的組合式API吧。
在vue3.0釋出的時候,組合式API也隨著釋出會進入到大眾的視野。官網把原來的使用方式命名為選項式API,同時官網也明確表示選項式API是由組合式API所實現的,所以大概後面vue的主推方向應該就是組合式API了。
我學習框架的方法是從語法到詞法,再到執行狀態。那麼先從語法開始學習,照舊還是以官網為例。
//程式碼一 <script setup> import { ref, onMounted } from 'vue' // 響應式狀態 const count = ref(0) // 用來修改狀態、觸發更新的函數 function increment() { count.value++ } // 生命週期勾點 onMounted(() => { console.log(`The initial count is ${count.value}.`) }) </script> <template> <button @click="increment">Count is: {{ count }}</button> </template>
可以看出,組合式API和原來的選項式API還是有差別的,原來的選項式API可以直接使用生命週期,變數宣告之類的內建方法,組合式API則需要先引入再使用。
先宣告一下,這個不是vue3.0版本的組合式API寫法,是vue3.2版本釋出時的語法糖,但是也是我個人建議使用的方法,畢竟不推薦的話也不會出這個語法糖。3.0版本的寫法有些繁瑣,但是大致上大差不差。
//程式碼二 import { reactive } from 'vue' export default { // `setup` 是一個專門用於組合式 API 的特殊勾點函數 setup() { const state = reactive({ count: 0 }) // 暴露 state 到模板 return { state } } }
這個是最初的組合式API的寫法,比起新版的語法糖只是多了一個setup和需要將變數return出來,而這個setup就是我認為的組合式API的核心。
最初的響應式API以 setup 函數作為入口函數, setup函數必須返回兩種型別的值:第一是物件,第二是函數。
當 setup 函數返回物件時,物件中的資料或方法可以在 template中被使用,也就相當於data函數裡面的變數。當 setup函數返回函數時,函數會被作為 render 函數。
不過可預見的是當頁面資料量變大的時候,setup函數會變得巨大,而且return的內容也會膨脹,所以vue3.2的語法糖省略了setup函數的包裹,而是直接將setup放到script裡面,裡面的程式碼就等同於放到了setup函數中,而且還省略了return的步驟。雖然沒有寫出setup函數,但是這段程式碼的本質就是setup函數的執行。
setup函數執行之後,裡面的變數會被直接暴露給元件,由元件使用。就以最上面的程式碼一中的count為例,count被宣告之後就可以放到template裡面,還可以被increment函數修改後在頁面中更新,這個就是靠ref方法,但是說ref之前先要說一下組合式API生命物件的方法reactive。
程式碼二中的state就是reactive方法宣告的物件,reactive和ref一樣,都是用來宣告變數的,只有通過這兩個方法宣告後的變數才能做到響應式更新。這裡其實是vue為了讓使用者簡單而導致的複雜,具體說比較複雜,我就簡單說說吧。
vue3依然是響應式的架構,通過對宣告的變數監聽從而收集到變數的修改事件,已達到響應式更新的功能。對vue3有一些瞭解的使用者都知道,vue3用的是proxy,但是proxy只能做到對物件代理,如果使用了原始型別,像是string,number之類的就沒有辦法了,所以vue3為了監聽原始型別的資料,使用ref去宣告原始型別,從而將原始型別變成物件,看起來通過ref宣告後的依然是原始型別,實際上我們修改的是這個變數的value的值,而不是這個物件的值。
組合式API還有一點就是無法直接修改宣告的變數值。以程式碼一為例,無論是count = 3
還是count=ref(3)
都會導致顯示無法更新。同樣的,程式碼二中的state的修改也不可以直接通過state=reactive({a:23})
或者state = {a:23}
的方式修改。
雖說ref也可以用來生命物件,不過還是不太建議,畢竟還是按照檔案的方式去寫才能做到最方便的維護,畢竟比維護別人的爛程式碼更難受的就是維護自己的爛程式碼。
當 ref 在模板中作為頂層屬性被存取時,它們會被自動“解包”,所以不需要使用 .value
。所以程式碼一中,template中的count不需要寫作count.value。
說回組合式API,變數修改之後,組合式API和選項式API一樣,是無法做到立刻將顯示更新的,所以想要獲取到變數修改後的頁面元素就需要nextTick,用法和vue的nextTick是一樣的,就不多贅述了。
從程式碼一和程式碼二中可以看出,組合式API裡面不需要將變數放到data裡面,函數放到method裡面,這樣的話可以讓有相關性的變數和函數放到一起。開發選項式API的時候當頁面資料量大的時候在method寫函數的時候忘記了變數名稱,就需要滑到data裡面看一下,然後在滑回method繼續寫函數。組合式API不能說完全避免,但是能大大減少這種情況的出現。
生命週期官網圖片還是挺全的,基本上和選項式API差不多,就是改改名字,去掉了create,改用setup。
Vue2.x | Vue3 |
---|---|
beforeCreate | setup |
created | |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeDestroy | onBeforeUnmount |
destroyed | onUnmounted |
從這篇文章中找到了一個對比的列表,大體上是可以一一對應的。生命週期的邏輯我就不多贅述了,由於用法不同,所以這裡我就根據程式碼一放一個錯誤的例子。
setTimeout(() => { onMounted(() => { // 非同步註冊時當前元件範例已丟失 // 這將不會正常工作 }) }, 100 )
生命週期可以放到函數裡面,然後在setup裡面呼叫,但是不能放到非同步函數裡面。
大體上回了這些就可以開始開發專案了,至於計算屬性,監聽器之類的,那都是後面的事情,這只是入門文章,過於入門了,所以並不建議熟練掌握的閱讀此文。
以上就是vue組合式API淺顯入門範例詳解的詳細內容,更多關於vue組合式API入門的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45