跟大家講解下有關鉤子函數是什么,相信小伙伴們對這個話題應該也很關注吧,現在就為小伙伴們說說鉤子函數是什么,小編也收集到了有關鉤子函數是什么的相關資料,希望大家看到了會喜歡。
鉤子(hook)函數就是處理攔截在軟件組件之間傳遞的函數調用或事件或消息的代碼,本質上就是用以處理系統消息的程序,通過系統調用,把它掛入系統中【推薦課程:React教程、Vue.js教程】
【推薦文章:react好還是vuejs好】
什么是鉤子(hook)函數
在計算機編程中,鉤子函數主要用于通過攔截在軟件組件之間傳遞的函數調用或消息或事件來改變或增強操作系統,應用程序或其他軟件組件的行為。處理這種截獲的函數調用,事件或消息的代碼稱為鉤子,它的本質就是用以處理系統消息的程序,通過系統調用,把它掛入系統。鉤子函數可用于許多目的,包括調試和擴展功能。常見的鉤子函數:react的生命周期函數、vue的生命周期函數等
React Hooks的含義
React Hooks用于從函數組件連接到React狀態和生命周期功能的簡單函數
這意味著鉤子允許我們輕松地操作我們的函數組件的狀態,而無需將它們轉換為類組件。這使我們不必處理所涉及的所有樣板代碼。
鉤子在類內部不起作用,它們允許你在沒有類的情況下使用React。而且,通過使用它們,我們可以完全避免使用生命周期方法,例如componentDidMount,componentDidUpdate等。相反,我們將使用內置的鉤子,如useEffect,useMutationEffect或useLayoutEffect。
鉤子是簡單的JavaScript函數,但它們強加了兩個額外的規則
(1)只在最頂層調用Hooks 。不要在循環,條件或嵌套函數中調用Hook
(2)僅從React功能組件調用Hooks 。不要從常規JavaScript函數調用Hook。還有另外一個有效的地方可以調用自定義Hooks。
我們需要記住在React 函數組件的上下文中,以前這些組件被稱為無狀態,但現在鉤子為我們提供了在這些組件中使用狀態的方法
Vuejs Hook的含義
Vuejs中的一個組件有一個生命周期,當它創建組件時,由Vue自己管理,將組件安裝到DOM,更新組件并銷毀組件。也就是每個組件都有自己的生命周期事件,我們可以通過實現一個或多個生命周期鉤子來關注該生命周期中的關鍵時刻,這些鉤子由Vue自己調用,從而為我們提供幫助有機會在組件生命周期的特定階段添加我們自己的代碼。
Vue有八個生命周期鉤子,記住它們的關鍵是知道它們中的四個是被觸發的事件,表明實際事件將發生。它們以實際鉤子之前的“之前”開始,并在實際鉤子之前被觸發。
Vue的八個生命周期鉤子
(1)beforeCreate: 這是在初始化Vue實例后調用的第一個鉤子。在這個階段,尚未建立數據觀察事件,計算屬性和觀察者。因此,我們無法與組件的任何部分進行交互。
(2)created:在創建實例后調用此鉤子,在這個階段,實例已經完成處理,數據觀察,計算屬性,方法,觀察者和事件回調已經建立。在此階段無法與DOM交互,因為尚未安裝組件
(3)beforeMount?:在此階段,模板可以從模板或渲染選項中編譯,也可以從Vue初始化為的元素的outerHTML編譯。模板尚未呈現,需要注意服務器端呈現期間不會調用此鉤子函數
(4)mounted?:在安裝實例后調用,其中el屬性由新創建的vm。$ el替換。如果將根實例掛載到文檔內元素,則在調用掛載時,vm $el也將在文檔中。調用掛接的掛鉤后,組件將完全正常工作,我們可以完全與之交互。
需要注意的一點是鉤子函數不能保證元素已添加到DOM中。要在此階段執行DOM依賴的代碼,需要將代碼置于回調方法中,并將其置于Vue.nextTick()函數中。例
<template> <p>I'm text inside the component.</p></template><script>export default { mounted() { // Element might not have been added to the DOM yet this.$nextTick(() => { // Element has been definitely added to the DOM console.log(this.$el.textContent); // I'm text inside the component. } }}</script>(5)beforeUpdate:在修補DOM之前,可以隨時更改我們的數據,并且需要更新DOM。注意在服務器端呈現期間不會調用此鉤子函數,因為只在服務器端執行初始呈現。
(6)updated:在更改完成后觸發鉤子函數。調用此函數時,組件的DOM會更新,因此可以在此處執行與DOM相關的操作。但是,在大多數情況下,應該避免更改鉤子內的狀態。通常最好使用計算屬性或觀察者。
需要注意的是更新并不能保證所有的子組件也進行了重新呈現。如果想等到整個視圖被重新渲染,你可以在更新的內部使用vm,$el
(7)beforeDestroy:在銷毀Vue實例之前調用。在此階段,實例仍然完全正常運行。可以在此處執行必要的清理。請注意,在服務器端呈現期間不會調用此掛接。
(8)Destroyed:在Vue實例被銷毀后調用。調用此函數時,Vue實例的所有指令都已解除綁定,所有事件偵聽器都已刪除,并且所有子Vue實例也已被銷毀。請注意,在服務器端呈現期間不會調用此掛接。
總結:以上就是有關于鉤子函數的介紹,希望對大家有所幫助
以上就是鉤子函數是什么的詳細內容,更多請關注php中文網其它相關文章!
來源:php中文網