高階元件(簡稱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
作為引數,然後返回乙個接受元件作為引數的函式,這個新函式返回乙個新的元件。新的元件渲染的時候會給傳入的元件設定content
和refresh
作為props
。
getdata(url)
的返回promise,它返回乙個字串的文字,你需要通過content
的props
把它傳給被包裹的元件。元件在第一次載入還有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 元件 高階元件的作用主要是用來加強元件,通過把基礎元件拆分成很小的粒度,通過高階元件進行增強並返回,以此提高復用性。比如需要開發乙個訊息框,一開始只需要乙個模態框能夠顯示訊息就可以。後來需要多增加 ...