搜尋
首頁web前端前端問答簡單聊聊Vue3中的Hook特性(總結分享)

這篇文章為大家帶來了為什麼要使用 Hook,Vue 3 的 Hook 和 React 有何不同,接下來透過此文分享一下,希望對大家有幫助。

簡單聊聊Vue3中的Hook特性(總結分享)

Hook 的概念

Hook 這個概念是在 React 中被提出的。首先簡單介紹一下在 React 中,Hook 是怎麼來的。

簡單聊聊Vue3中的Hook特性(總結分享)

簡單聊聊Vue3中的Hook特性(總結分享)

參考大家熟知的Vue 2 程式碼結構,我們看到:React 整體使用Class 來封裝一個元件;設計了一個state來管理變量,相當於Vue 2 中的data;同樣擁有生命週期和自訂方法;模板部分借助JSX 寫進一個渲染函數。如果需要更新視圖,則必須透過 setState 方法更新 state 中的變量,然後視圖上的資料才會隨之更新,無法直接透過更新視圖來更新資料。

可以看出,和 Vue 不同,它是單向的資料流。 Vue 的讀音是視圖的 "view",而 "state",是狀態的意思。如果說 Vue 是視圖導向,React 就是狀態導向。

既然React 是用Class 實作元件,那麼問題就隨之而來:在Class 內必須注意this 的指向問題;而且在元件發生復用和嵌套時,對每一層元件的props都要進行操作,邏輯複雜。

於是函數元件誕生,為 React 實現了狀態(state)分離。

簡單聊聊Vue3中的Hook特性(總結分享)

這裡把變數的宣告、元件方法、渲染函數全部封裝到一個函數中,新增了一個useEffect 來實現生命週期和監聽 state 資料的變化。這個元件在被宣告、更新、即將銷毀時,都會呼叫定義它的函數,輸出一個新的視圖。

再來看 Vue 3 中如何定義一個元件:

簡單聊聊Vue3中的Hook特性(總結分享)

#是不是與上面的寫法及其相似?不過雖然寫法很像,他們在實現上還是有很大的差別。我們前面提到,React 是狀態導向,而 Vue 是視圖導向。 React 函數元件透過重新呼叫函數來更新視圖,把生命週期融入了元件宣告;而Vue 的setup 方法只取代了beforeCreate 和created,其他生命週期仍然保留在元件內部定義,每個實例只執行一次setup,同時支援監聽視圖和資料的變化。

常有人說 Vue 是又實現了一次 React,但是兩者理念完全不同,其實可以理解為,Vue 在保留自身特性的同時,採取了 React 的設計方式。

所以什麼是 Hook ?在 React 中的定義是,在函數元件中保留 state 資料的同時,融入生命週期函數,並將元件整體視為一個鉤子函數。

自訂 Hook

當元件複雜時,多個元件中一些重複的邏輯可以被抽像出來。在 Hook 誕生之前,React 和 Vue 都擁有高階元件的設計模式,在 React 使用到 HOC,在 Vue 2 中使用到 mixin。為什麼要捨棄它們而使用 Hook,使用自訂 Hook 又有哪些優點,我們先簡單了解一下 HOC 和 mixin ,比較後便知。

簡單聊聊Vue3中的Hook特性(總結分享)

HOC 的原理是把元件當作參數傳入一個函數,加入複用部分後將新的元件作為回傳值,使用了裝飾器模式。 mixin 像是把復用的部分拆解成一個個小零件,某個組件需要時就拼接進去。

在實務上,mixin 有以下缺點:

  • 引入了隱式相依性。

  • 不同mixins 之間可能會有先後順序甚至程式碼衝突覆蓋的問題

  • mixin 程式碼會導致滾雪球式的複雜性

  • 多個mixin 導致合併項目不明來源

為了避開這些問題,React 採用HOC,但它仍然有缺陷:

  • 一個元件的state影響許多元件的props

  • 造成地獄巢狀

不過使用全新的Hook元件結構,可以實現平鋪式呼叫元件的複用部分,解決了mixin 的來源不明和HOC 的地獄巢狀問題。

Vue 3 實作 Hook

#前面說到 React 將 Class 元件轉換為函數元件,實作了 Hook。在 Vue 3 中,Hook 是透過 Vue 3 新特性的最重要的部分——組合式 API 來實現的。

使用組合式API 編寫元件,簡單來說,先前根據資料型別拆分成的data 、methods、生命週期等都被放在一個setup 函數中,而元件在初始化時也只需要呼叫一次setup 函數。具體的 API 這裡不作詳細介紹,可以去查閱官方文件。 (antfu 講解組合式 API)

利用組合式 API,就可以仿照 React 的寫法來實作一個 Hook。例如這是一個檔案系統管理的例子:

簡單聊聊Vue3中的Hook特性(總結分享)

簡單聊聊Vue3中的Hook特性(總結分享)

想像一下,如果這段程式碼在Vue 2 裡實現,只是一個建立資料夾的動作,就要把宣告的變數、方法、監聽資料等拆解到各個部分,更何況我們還要實現刪除、 編輯、複製貼上等等功能,修改程式碼的工作量想想就非常龐大。

但用這種 Hook 的形式編寫,我們可以把實作同一個功能的程式碼組合在一起,不僅程式碼非常簡潔清晰,而且我們也可以很好地知道複用元件的來源。

比起 React 的 Hook,Vue 3 在底層也做了一些最佳化,解除 react 函數元件的限制,提高了效能。

總結

本文大致內容如下:

簡單聊聊Vue3中的Hook特性(總結分享)

# #思考

為什麼會有hook 這種概念,而不用原來的HOC 、mixin,可以看出在程式開發上一個進步的大方向就是越來越抽象化,類似於從C語言這種過程導向程式設計的語言發展到java 這種物件導向程式設計的語言,從原生的前端三劍客發展到使用框架做元件開發,Hook 做的是同樣的事情。把相關的邏輯封裝在一起,無關的隔離開來,降低耦合度,把復用邏輯以介面的形式暴露給其他元件,屏蔽底層的實現。

這樣同樣的功能在寫法上更加簡潔,修改單一功能不會牽扯到隱藏的依賴,降低維護的複雜度,規定的use 命名使得程式碼易讀、易擴展,也有利於多人協作。

state 在 React 中是很重要的概念,用作狀態管理的 Redux 其實是為了讓 React 中的 state 便於管理,而 Vue 實作了類似的 Vuex,卻沒有 state 機制。類似地,兩者的 Hook 也都用到 effect,在 React 中 effect 也是為了解決 state 問題,Vue 使用它的機製完全不同。

React 像是實現了一個以狀態機為中心思想的系統,零件之間邏輯緊密,而Vue 用自己的方法重新實現了React 中的一些方法,使其完全分割開,需要哪一個就把哪個組裝進來。他們用的是兩個完全不同的理念,不能說誰比較好,但是在學習一個框架的時候,可以透過參考另一個框架的設計想法來加深理解。

前段時間尤雨溪在知乎上也回答了一個問題提到說,從AngularJS、React 到Vue,其實是理念上的進步,如果你只是仿照這些思想做一個新的框架,那就只是在造輪子而已,而想要做一個里程碑式的進步,改進理念才是我們該做的。 【相關推薦:《

vue.js教學###》】###

以上是簡單聊聊Vue3中的Hook特性(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金。如有侵權,請聯絡admin@php.cn刪除
反應:創建動態和交互式用戶界面反應:創建動態和交互式用戶界面Apr 14, 2025 am 12:08 AM

React是構建動態和交互式用戶界面的首選工具。 1)組件化與JSX使UI拆分和復用變得簡單。 2)狀態管理通過useState鉤子實現,觸發UI更新。 3)事件處理機制響應用戶交互,提升用戶體驗。

React與後端框架:比較React與後端框架:比較Apr 13, 2025 am 12:06 AM

React是前端框架,用於構建用戶界面;後端框架用於構建服務器端應用程序。 React提供組件化和高效的UI更新,後端框架提供完整的後端服務解決方案。選擇技術棧時需考慮項目需求、團隊技能和可擴展性。

HTML和React:標記與組件之間的關係HTML和React:標記與組件之間的關係Apr 12, 2025 am 12:03 AM

HTML和React的關係是前端開發的核心,它們共同構建現代Web應用的用戶界面。 1)HTML定義內容結構和語義,React通過組件化構建動態界面。 2)React組件使用JSX語法嵌入HTML,實現智能渲染。 3)組件生命週期管理HTML渲染,根據狀態和屬性動態更新。 4)使用組件優化HTML結構,提高可維護性。 5)性能優化包括避免不必要渲染,使用key屬性,保持組件單一職責。

反應與前端:建立互動體驗反應與前端:建立互動體驗Apr 11, 2025 am 12:02 AM

React是構建交互式前端體驗的首選工具。 1)React通過組件化和虛擬DOM簡化UI開發。 2)組件分為函數組件和類組件,函數組件更簡潔,類組件提供更多生命週期方法。 3)React的工作原理依賴虛擬DOM和調和算法,提高性能。 4)狀態管理使用useState或this.state,生命週期方法如componentDidMount用於特定邏輯。 5)基本用法包括創建組件和管理狀態,高級用法涉及自定義鉤子和性能優化。 6)常見錯誤包括狀態更新不當和性能問題,調試技巧包括使用ReactDevTools和優

React和前端堆棧:工具和技術React和前端堆棧:工具和技術Apr 10, 2025 am 09:34 AM

React是一個用於構建用戶界面的JavaScript庫,其核心是組件化和狀態管理。 1)通過組件化和狀態管理簡化UI開發。 2)工作原理包括調和和渲染,優化可通過React.memo和useMemo實現。 3)基本用法是創建並渲染組件,高級用法包括使用Hooks和ContextAPI。 4)常見錯誤如狀態更新不當,可使用ReactDevTools調試。 5)性能優化包括使用React.memo、虛擬化列表和CodeSplitting,保持代碼可讀性和可維護性是最佳實踐。

React在HTML中的作用:增強用戶體驗React在HTML中的作用:增強用戶體驗Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

REACT組件:在HTML中創建可重複使用的元素REACT組件:在HTML中創建可重複使用的元素Apr 08, 2025 pm 05:53 PM

React組件可以通過函數或類定義,封裝UI邏輯並通過props接受輸入數據。 1)定義組件:使用函數或類,返回React元素。 2)渲染組件:React調用render方法或執行函數組件。 3)復用組件:通過props傳遞數據,構建複雜UI。組件的生命週期方法允許在不同階段執行邏輯,提升開發效率和代碼可維護性。

反應嚴格模式目的反應嚴格模式目的Apr 02, 2025 pm 05:51 PM

React嚴格模式是一種開發工具,可通過激活其他檢查和警告來突出反應應用中的潛在問題。它有助於識別遺產代碼,不安全的生命週期和副作用,鼓勵現代反應實踐。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。