這篇文章給大家分享的是有關react中hoc有什么用的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
HOC是react中對組件邏輯復用部分進行抽離的高級技術,但HOC并不是一個React API,它是一個方法,一個接收一個組件作為參數,返回一個增強的組件的方法。
HOC(High Order Component) 是 react
中對組件邏輯復用部分進行抽離的高級技術,但HOC并不是一個 React API
。 它只是一種設計模式,類似于裝飾器模式。
具體而言,HOC就是一個函數,且該函數接受一個組件作為參數,并返回一個新組件。
從結果論來說,HOC相當于 Vue
中的 mixins(混合)
。其實 React
之前的策略也是采用 mixins
,但是后來 facebook
意識到 mixins
產生的問題要比帶來的價值大,所以移除了 mixins
。 想要了解更多
來看個例子
import React, { Component } from 'react'class Page1 extends Component{ componentWillMount(){ let data = localStorage.getItem('data') this.setState({ data }) } render() { return ( <h3>{this.state.data}</h3> ) } } export default Page1
這個例子中在組件掛載前需要在 localStorage
中取出 data
的值,但當其他組件也需要從 localStorage
中取出同樣的數據進行展示的話,每個組件都需要重新寫一遍 componentWillMount
的代碼,那就會顯得非常冗余。那么在 Vue
中通常我們采用:
mixins: []
但是在 React
中我們需要采用HOC模式咯
import React, { Component } from 'react' const withStorage = WrappedComponent => { return class extends Component{ componentWillMount() { let data = localStorage.getItem('data') this.setState({ data }) } render() { return <WrappedComponent data={this.state.data} {...this.props} /> } } } export default withStorage
當我們構建好一個HOC之后,我們使用的時候就簡單多了,還看最開始的例子,我們就不需要寫 componentWillMount
了。
import React, { Component } from 'react' import withStorage from '@/utils/withStorage' class Page1 extends Component{ render() { return <h3>{this.props.data}</h3> } } export default withStorage(Page1)
很明顯,這是一個裝飾器模式,那么就可以使用ES7形式
import React, { Component } from 'react' import withStorage from '@/utils/withStorage' @withStorage class Page1 extends Component{ render() { return <h3>{this.props.data}</h3> } } export default Page1
操縱 props
通過 ref 訪問組件實例
組件狀態提升
用其他元素包裝組件
1,命名
把被包裝的組件名稱也包到HOC的顯示名稱中。
2,時機
不要在組件的 render
方法中使用HOC,盡量也不要在組件的其他生命周期中使用HOC。因為調用HOC的時候每次都會返回一個新的組件,于是每次render,前一次高階組件創建的組件都會被卸載(unmount),然后重新掛載(mount)本次創建的新組件,既影響效率又丟失了組件及其子組件的狀態。
3,靜態方法
如果需要使用被包裝組件的靜態方法,那么就需要手動復制這些靜態方法,因為HOC返回的新組建不包含被包裝組件的靜態方法。
4,ref
不會被傳遞給被包裝組件
高階組件屬于函數式編程(functional programming)思想,對于被包裹的組件時不會感知到高階組件的存在,而高階組件返回的組件會在原來的組件之上具有功能增強的效果。而Mixin這種混入的模式,會給組件不斷增加新的方法和屬性,組件本身不僅可以感知,甚至需要做相關的處理(例如命名沖突、狀態維護),一旦混入的模塊變多時,整個組件就變的難以維護,也就是為什么如此多的React庫都采用高階組件的方式進行開發。
感謝各位的閱讀!關于react中hoc有什么用就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。