React 高階元件入門介紹

2022-10-06 06:30:09 字數 1823 閱讀 4792

高階元件的定義

hoc 不屬於 react 的 api,它是一種實現模式,本質上是乙個函式,接受乙個或多個 react 元件作為引數,返回乙個全新的 react 元件,而不是改造現有的元件,這樣的元件被稱為高階元件。開發過程中,有的功能需要在多個元件類復用時,這時可以建立乙個 hoc。

基本用法

包裹方式

const hoc = (wrappendcomponent) => ;

上述**中,接受 wrappendcomponent 作為引數,此引數就是將要被 hoc 包裝的普通元件,在 render 中包裹乙個 div,賦予它 classname 屬性,最終產生的 wrappingcomponent 和 傳入的 wrappendcomponent 是兩個完全不同的元件。

在 wrappingcompfkfpmpfiwconent 中,可以讀取、新增、編輯、刪除傳給 wrappendcomponent 的 props,也可以用其它元素包裹 wrappendcomponent,用來實現封裝樣式、新增布局或其它操作。

組合方式

const hoc = (wrappedcomponent, loginview) => = this.props;

if (user) else

}; return wrappingcomponent;

};上述**中有兩個元件,wrappedcomponent 和 loginview,如果傳入的 props 中存在 user,則正常顯示的 wrappedcomponent 元件,否則顯示 loginview 元件,讓使用者去登入。hoc 傳遞的引數可以為多個,傳遞多個元件定製新元件的行為,例如使用者登入狀態下顯示主頁面,未登入顯示登入介面;在渲染列表時,傳入 list 和 loading 元件,為新元件新增載入中的行為。

繼承方式

const hoc = (wrappendcomponent) => = this.props;

this.props = otherprops;

return super.ren

} }return wrappingcomponent;

};wrappingcomponent 是乙個新元件,它繼承自 wrappendcomponent,共享父級的函式和屬性。可以使用 super.render() 或者 super.componentwillupdate() 呼叫父級的生命週期函式,但是這樣會讓兩個元件耦合在一起,降低元件的復用性。

react 中對元件的封裝是按照最小可用單元的思想來進行封裝的,理想情況下,乙個元件只做一件事情,符合 oop 中的單一職責原則。如果需要對元件的功能增強,通過組合的方式或者新增**的方式對元件進行增強,而不是修改原有的**。

注意事項

不要在 rend程式設計客棧er 函式中使用高階元件

render()

react 中的 diff 演算法會比較新舊子物件樹,確定是否更新現有的子物件樹或丟掉現有的子樹並重新掛載。

必須將靜態方法做拷貝

// 定義靜態方法

wrappedcomponent.staticmethod = function()

// 使用高階元件

const 程式設計客棧enhancedcomponent = enhance(wrappedcomponent);

// 增強型元件沒有靜態方法

typeof enhancedcomponent.staticmethod === 'undefined' // true

refs屬性不能傳遞

hoc中指定的 ref,並不會傳遞到子元件,需要通過**函式使用 props 傳遞。

參考鏈結

高階元件

本文標題: react 高階元件入門介紹

本文位址:

React高階元件入門

在了解高階元件之前我們先了解高階函式是什麼 函式可以被作為引數傳遞 settimeout 1000 函式可以作為返回值輸出 function foo x 高階函式的應用 高階函式在時間函式上的應用 settimeout function 1000 setinterval 1000 高階函式在jque...

React高階元件入門

react高階元件入門 react高階元件也差不多快要退出主流舞台了,我是因為初學,所以記錄一下自己的理解 簡介 有點像vue的mixin 物件混入 封裝公共模組。不過react並不提倡這種做法,所以引入了一種新的概念叫高階元件 hoc 乙個函式,能夠接受乙個元件並返回乙個新的元件。命題乙個模組需要...

React高階元件

想想以前用原生和jquery的專案,上千行的code映入眼簾,瞬間有種昏死過去的衝動。難以維護,改乙個bug可能出現n個bug,真的是很痛苦。於是乎元件化成為了當前前端開發的主流技術。angular vue和react很好的幫我們實現了元件化。但是我們常常也會遇到一種情況,就是兩個元件往往有很多的重...