技術問答
技術文章
iT 徵才
Tag
聊天室
2024 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
0
Life Cycle 生命週期 in composition API
vue學習筆記
yenchenjulia
2024-02-16 11:07:23
‧
1073 瀏覽
分享至
前言
生命週期的相關內容其實翻了蠻多次,但之前因為急著用,所以並沒有很靜下心來研究整個循環到底在做什麼,概念很模糊,同樣也是用得很沒安全感,今天年假放完第一天,打算把這塊補上,但早上有點抓不到節奏,一下跳這一下跳那,不知道自己該從何學起,下午終於還是回到Vue官方文件,老老實實地啃英文,看不懂就不斷的重看,再這樣來來回回幾遍後,好像有點懂了。
試解釋SPA(Single Page Application)
早上亂看跳來跳去最大的收穫就是理解了SPA,所以在討論生命週期之前,很想提一下,這也是為什麼我們要用Vue框架的原因之一。以前使用者在瀏覽器瀏覽網頁並按下網頁內任何可點擊位置,都會發送請求至伺服器,等待伺服器端準備妥善後回傳,較為耗時沒有效率。如果改以Vue框架的方式生成,它的概念是在同一個頁面下,當使用者點擊後,Vue隨即攔截並依指定請求更換適當組件後回傳,不再需要回到server端,縮短時間成本提升效率,而這樣以同一頁面不同組件實現的方式即為SPA。
試解釋生命週期
每一個vue檔案,有其生命週期,也就是整個檔案的從無到有再從有到無的過程,其實每個實質的東西都有其壽命,在每個階段,會有該階段必須發生的事,不能早也不能晚,例如一個小孩不同年齡有不同的補助津貼,必須在指定時間申請。到了入學的年齡,必須註冊登記入學,諸如此類,關於寫code,同樣要從一開始就得想個八九成,好好的把什麼時候該發生什麼事登記下來,以防歪樓,你說對吧!
官網很經典的示意圖如下:
以我目前的認知,有底色搭配白字的部分是動態過程,交代在當下Vue instance所做的事情
有色框白底是Vue instance各階段,同時有其對應的lifecycle hooks,有了這些hooks,我們就可以預先把該發生的事都登記在hook中,這些預先登記好的事件會在一開始setup()的階段,被同步呼叫並依序堆疊至call stack中,靜待生命週期發展到適當時機,使這些已登記的事件一一發生
Lifecycle Hooks
setup(): 等同於Option API中的beforeCreate跟created階段,Vue instance成立,各事件狀態完成初始化
onBeforeMount():Vue instance還沒與Template(Dom節點)綁定
onMounted():Vue instance掛載完成,所以如有需要手動操作Dom API,要在此階段完成後再進行操作,以免操作的Dom節點被Vue.js替換掉
onBeforeUpdate():當狀態被變動時,畫面同步更新前
onUpdated():當狀態被變動時,畫面已同步更新完成
onBeforeUnmount():Vue instance被銷毀前
onUnmounted():Vue instance完成銷毀時,通常會使用它來清除計時器、事件監聽器及伺服器連結
onErrorCaptured():子/孫代元件的錯誤被捕獲時觸發
心得
筆記寫一寫,有個困惑點,所以我所有的函式都要安穩地先登記在各階段嗎?跟實作上好像有差異,思考一下之後,自己目前的理解是很明確在那一個階段必須發生的事情才會先登記,例如小孩7歲就是要讀國小,這種很明確的大事,而養小孩的過程,會有許許多多因小孩而異的不同事件,比如有的要去學鋼琴,有的要去學畫畫,在開發上就是先用函式表達,等要用到時再呼叫,而不需要一開始就登記在Lifecycle hook上。
寫完這篇,以養小孩類比的方式,確實讓我更能理解其中的意義,未來使用上應該也會來得比較直覺。
參考資料
lifecycle-diagram
composition-api-lifecycle
Vue JS 3 Tutorial for Beginners #1 - Introduction
CH1/1-7-lifecycle
留言
追蹤
檢舉
直播研討會
{{ item.subject }}
{{ item.channelVendor }}
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
1064
組
團體組數
40
組
累計文章數
22196
篇
完賽人數
602
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
vue.js
熱門問題
如何讓在中國的同事可以穩定的使用台灣總部的系統服務
Web Application 與Web Service 的差異
AB兩點網路使用LTE數據機做連接
求救,erp 無法使用,ping封包 100% 丟失
如何練國考資訊題?
Active Directory 環境中時間無法同步問題
電腦版Outlook 封存郵件無法包含有作標幟的郵件
fortigate 60E 配IP給無限AP問題
如何以php抓取html文件的特定元素,並且依照抓取順序填入頁碼
JS 讀取EXCEL檔的日期字串如何轉換
熱門回答
如何讓在中國的同事可以穩定的使用台灣總部的系統服務
求救,erp 無法使用,ping封包 100% 丟失
AB兩點網路使用LTE數據機做連接
電商在販售商品時,可以自行縮短保固期限嗎?
Active Directory 環境中時間無法同步問題
熱門文章
卷 31:iThome 鐵人賽寫作攻略——新手必看指南
大總結 - Win11 是對企業和私人的大改版
Python 字串string 方法,zfill() & f"{i:0xd}" &浮點數格式化
Python Multiple line input
每日一篇學習筆記 直到我做完專題 :( [Day1]
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}