React提高05 高階元件

2021-09-10 05:38:24 字數 2580 閱讀 2900

高階元件(簡稱hoc)的目的就是實現**的復用,它不是react的api,而是根據react的特性形成的一種開發正規化。它接受乙個元件作為引數並返回乙個新的元件

return class hoc extends react.component }

hoc中並沒有修改輸入的元件,也沒有通過繼承來擴充套件元件,而是通過組合的方式來達到擴充套件的目的

(1)**復用,**模組化

看這樣的乙個例子:

載入資料、重新整理資料的行為很常見,現在把這種邏輯抽離到高階元件當中去。完成高階元件loadandrefresh,它具有以下功能:

class post extends component 

this.props.refresh()}>重新整理)}}

post = loadandrefresh('/post')(post)

高階元件loadandrefresh接受乙個url作為引數,然後返回乙個接受元件作為引數的函式,這個新函式返回乙個新的元件。新的元件渲染的時候會給傳入的元件設定contentrefresh作為props

getdata(url)的返回promise,它返回乙個字串的文字,你需要通過contentprops把它傳給被包裹的元件。元件在第一次載入還有refresh的時候會去伺服器取資料。

另外,元件在載入資料的時候,content顯示資料載入中...。而且,所有傳給loadandrefresh返回的元件的props要原封不動傳給被包裹的元件。

最後一句話,loadandrefresh返回的元件就是返回的新元件post,被包裹的就是傳入的原來的post,原封不動就是指需要將this.props完全傳遞,利用了物件解構的語法

const getdata = url => new promise((resolve) => );

class post extends component

this.props.refresh()}>重新整理)}}

return class extends react.component

};componentdidmount () ;

async refresh() );

const content = await getdata(url);

this.setstate();

};render ()

}};post = loadandrefresh('/post')(post);

export default class pcheader extends component

}

上面的高階元件中,接受了post作為個性元件,而hoc中的公共元件部分實現的就是抽離出來的獲取、重新整理資料的邏輯(它也是乙個元件)。

props的傳遞是通過在元件上,利用物件的擴充套件,將所有prop傳入

(2)增刪改props

hoc元件可以對傳入的props進行修改或者新增

hoc元件會在原始元件的基礎上增加一些擴充套件功能使用的props,這些props不應該傳入到原始元件,一般會這樣處理:

return class control extends react.component ;

}}(3)渲染劫持

可以在hoc中控制是否渲染(這裡控制的元件整體是否被渲染,而非組建內部的細節),無法在hoc中控制渲染細節

比如,元件在data沒有載入完的時候載入loading,可以在hoc中這樣實現:

return class loading extends react.component

}}在render裡面每次呼叫hoc都會返回乙個新的class,重新渲染會讓效能損耗加大。

有的時候在元件的class包裝的靜態方法,通過hoc返回的包裝後的元件就沒有這些靜態方法。

為了保持元件使用的一致性,一般會把這些靜態方法拷貝到包裝後的元件上

class enhance extends react.component

// must know exactly which method(s) to copy :(

return enhance;

}官網的例子,可以用來監控父級元件傳入的props的改變:

return class extends react.component

render()

}}可以使用hoc對元件進行包裹,當元件載入的時候,首先檢驗使用者是否有對應的許可權,如果有的話就渲染頁面,如果沒有就跳走

React高階元件

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

react高階元件

基本概念 函式可以作為引數被傳遞 函式可以作為返回值輸出 元件作為引數被傳遞,返回值是乙個元件 高階元件是乙個函式 案例 將a元件作為公共元件,bc元件作為a函式的引數,來共享顯示a元件 此處紅框是a元件,紅框裡左邊內容為b元件,右邊內容為c元件 1.建立公共的a元件 將元件a封裝成乙個函式,接收乙...

React 高階元件

高階元件 high order component,hoc 輸入 react 元件 輸出 react 元件 高階元件的作用主要是用來加強元件,通過把基礎元件拆分成很小的粒度,通過高階元件進行增強並返回,以此提高復用性。比如需要開發乙個訊息框,一開始只需要乙個模態框能夠顯示訊息就可以。後來需要多增加 ...