最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React 高階組件入門介紹

 更新時間:2018年01月11日 09:51:39   作者:創(chuàng)宇前端  
本篇文章主要介紹了React高階組件入門介紹,這篇文章中我們詳細(xì)的介紹了什么是高階組件,如何使用高階組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

高階組件的定義

HoC 不屬于 React 的 API,它是一種實(shí)現(xiàn)模式,本質(zhì)上是一個函數(shù),接受一個或多個 React 組件作為參數(shù),返回一個全新的 React 組件,而不是改造現(xiàn)有的組件,這樣的組件被稱為高階組件。開發(fā)過程中,有的功能需要在多個組件類復(fù)用時,這時可以創(chuàng)建一個 Hoc。

基本用法

包裹方式

const HoC = (WrappendComponent) => {
 const WrappingComponent = (props) => (
  <div className="container">
   <WrappendComponent {...props} />
  </div>
 );
 return WrappingComponent;
};

上述代碼中,接受 WrappendComponent 作為參數(shù),此參數(shù)就是將要被 HoC 包裝的普通組件,在 render 中包裹一個 div,賦予它 className 屬性,最終產(chǎn)生的 WrappingComponent 和 傳入的 WrappendComponent 是兩個完全不同的組件。

在 WrappingComponent 中,可以讀取、添加、編輯、刪除傳給 WrappendComponent 的 props,也可以用其它元素包裹 WrappendComponent,用來實(shí)現(xiàn)封裝樣式、添加布局或其它操作。

組合方式

const HoC = (WrappedComponent, LoginView) => {
 const WrappingComponent = () => {
  const {user} = this.props; 
  if (user) {
   return <WrappedComponent {...this.props} />
  } else {
   return <LoginView {...this.props} />
  }
 };
 return WrappingComponent;
};

上述代碼中有兩個組件,WrappedComponent 和 LoginView,如果傳入的 props 中存在 user,則正常顯示的 WrappedComponent 組件,否則顯示 LoginView 組件,讓用戶去登錄。HoC 傳遞的參數(shù)可以為多個,傳遞多個組件定制新組件的行為,例如用戶登錄狀態(tài)下顯示主頁面,未登錄顯示登錄界面;在渲染列表時,傳入 List 和 Loading 組件,為新組件添加加載中的行為。

繼承方式

const HoC = (WrappendComponent) => {
 class WrappingComponent extends WrappendComponent {
  render() (
   const {user, ...otherProps} = this.props;
   this.props = otherProps;
   return super.render();
  }
 }
 return WrappingComponent;
};

WrappingComponent 是一個新組件,它繼承自 WrappendComponent,共享父級的函數(shù)和屬性??梢允褂?super.render() 或者 super.componentWillUpdate() 調(diào)用父級的生命周期函數(shù),但是這樣會讓兩個組件耦合在一起,降低組件的復(fù)用性。

React 中對組件的封裝是按照最小可用單元的思想來進(jìn)行封裝的,理想情況下,一個組件只做一件事情,符合 OOP 中的單一職責(zé)原則。如果需要對組件的功能增強(qiáng),通過組合的方式或者添加代碼的方式對組件進(jìn)行增強(qiáng),而不是修改原有的代碼。

注意事項(xiàng)

不要在 render 函數(shù)中使用高階組件

render() {
 // 每一次render函數(shù)調(diào)用都會創(chuàng)建一個新的EnhancedComponent實(shí)例
 // EnhancedComponent1 !== EnhancedComponent2
 const EnhancedComponent = enhance(MyComponent);
 // 每一次都會使子對象樹完全被卸載或移除
 return <EnhancedComponent />;
}

React 中的 diff 算法會比較新舊子對象樹,確定是否更新現(xiàn)有的子對象樹或丟掉現(xiàn)有的子樹并重新掛載。

必須將靜態(tài)方法做拷貝

// 定義靜態(tài)方法
WrappedComponent.staticMethod = function() {/*...*/}
// 使用高階組件
const EnhancedComponent = enhance(WrappedComponent);

// 增強(qiáng)型組件沒有靜態(tài)方法
typeof EnhancedComponent.staticMethod === 'undefined' // true

Refs屬性不能傳遞

HoC中指定的 ref,并不會傳遞到子組件,需要通過回調(diào)函數(shù)使用 props 傳遞。

參考鏈接

高階組件

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • react之組件通信詳解

    react之組件通信詳解

    本篇文章主要介紹了React組件通信詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • React?狀態(tài)管理中的Jotai詳解

    React?狀態(tài)管理中的Jotai詳解

    Jotai是一個簡單、靈活、高效的React狀態(tài)管理庫,通過原子和派生狀態(tài)的設(shè)計(jì),使得狀態(tài)管理變得直觀和高效,它適用于小型應(yīng)用、組件庫和大型項(xiàng)目的局部狀態(tài)管理,且與TypeScript兼容,Jotai的社區(qū)正在壯大,提供了豐富的資源和支持,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • react實(shí)現(xiàn)移動端下拉菜單的示例代碼

    react實(shí)現(xiàn)移動端下拉菜單的示例代碼

    這篇文章主要介紹了react實(shí)現(xiàn)移動端下拉菜單的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 前端開發(fā)使用Ant Design項(xiàng)目評價

    前端開發(fā)使用Ant Design項(xiàng)目評價

    這篇文章主要為大家介紹了前端開發(fā)使用Ant Design項(xiàng)目評價,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序功能

    react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序功能

    這篇文章主要介紹了react項(xiàng)目中使用react-dnd實(shí)現(xiàn)列表的拖拽排序,本文結(jié)合實(shí)例代碼講解react-dnd是如何實(shí)現(xiàn),代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • React Agent 自定義實(shí)現(xiàn)代碼

    React Agent 自定義實(shí)現(xiàn)代碼

    在使用langchain的ReactAgent遇到問題后,作者嘗試自定義ReactAgent實(shí)現(xiàn),通過詳細(xì)分析langchain中的agent功能和問題,結(jié)合React思想,作者設(shè)計(jì)了新的agent邏輯并在GitHub上分享了代碼,新的ReactAgent通過改進(jìn)prompt和工具調(diào)用邏輯,提升了任務(wù)執(zhí)行的效果和穩(wěn)定性
    2024-10-10
  • React?JSX深入淺出理解

    React?JSX深入淺出理解

    React使用JSX來替代常規(guī)的JavaScript。JSX是一個看起來很像 XML的JavaScript語法擴(kuò)展。我們不需要一定使用 JSX,但它有以下優(yōu)點(diǎn):JSX執(zhí)行更快,因?yàn)樗诰幾g為JavaScript代碼后進(jìn)行了優(yōu)化。它是類型安全的,在編譯過程中就能發(fā)現(xiàn)錯誤。使用JSX編寫模板更加簡單快速
    2022-12-12
  • 詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境

    這篇文章主要介紹了詳解如何用webpack4從零開始構(gòu)建react開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • React使用React.lazy和Suspense實(shí)現(xiàn)組件懶加載

    React使用React.lazy和Suspense實(shí)現(xiàn)組件懶加載

    React 提供了 React.lazy 和 Suspense 這兩個好東西,能讓我們實(shí)現(xiàn)組件的懶加載,下面就跟隨小編一起來了解一下如何使用它們實(shí)現(xiàn)懶加載的具體步驟吧
    2025-03-03
  • 編寫簡潔React組件的小技巧

    編寫簡潔React組件的小技巧

    這篇文章主要介紹了編寫簡潔React組件的小技巧,幫助大家更好的理解和學(xué)習(xí)使用React,感興趣的朋友可以了解下
    2021-04-04

最新評論

鲁山县| 彩票| 拜城县| 抚州市| 两当县| 浠水县| 娱乐| 洱源县| 博野县| 碌曲县| 抚州市| 吉首市| 宣汉县| 扬州市| 旬阳县| 新乐市| 镇沅| 江西省| 左权县| 齐河县| 宁化县| 湖北省| 双城市| 东宁县| 兴业县| 集安市| 永顺县| 宁安市| 洞口县| 满洲里市| 偏关县| 双江| 桃江县| 松溪县| 隆子县| 时尚| 新平| 山西省| 宁陕县| 宜州市| 景宁|