首頁 web前端 js教程 React 高階元件入門執行個體分享

React 高階元件入門執行個體分享

Jan 13, 2018 am 09:19 AM
react 入門 實例

本文主要介紹了React高階組件入門介紹,這篇文章中我們詳細的介紹了什麼是高階組件,如何使用高階組件,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

高階元件的定義

HoC 不屬於React 的API,它是實作模式,本質上是函數,接受一個或多個React 元件作為參數,傳回一個全新的React 元件,而不是改造現有的元件,這樣的元件稱為高階元件。開發過程中,有的功能需要在多個元件類別重複使用時,這時可以建立一個 Hoc。

基本用法

包裹方式


const HoC = (WrappendComponent) => {
 const WrappingComponent = (props) => (
  <p className="container">
   <WrappendComponent {...props} />
  </p>
 );
 return WrappingComponent;
};
登入後複製

在上述程式碼中,接受WrappendComponent 作為參數,此參數就是將要被HoC 包裝的普通元件,在render 中包裹一個p,賦予它className 屬性,最終產生的WrappingComponent 和傳入的WrappendComponent 是兩個完全不同的元件。

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

組合方式


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 傳遞的參數可以為多個,傳遞多個元件自訂新元件的行為,例如使用者登入狀態下顯示主頁面,未登入顯示登入介面;在渲染清單時,傳入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,共享父級的函式和屬性。可以使用 super.render() 或 super.componentWillUpdate() 呼叫父級的生命週期函數,但這樣會讓兩個元件耦合在一起,降低元件的複用性。

React 中對元件的封裝是按照最小可用單元的想法來進行封裝的,理想情況下,一個元件只做一件事情,符合 OOP 中的單一職責原則。如果需要對組件的功能增強,透過組合的方式或添加程式碼的方式對組件進行增強,而不是修改原有的程式碼。

注意事項

不要在render 函數中使用高階元件


render() {
 // 每一次render函数调用都会创建一个新的EnhancedComponent实例
 // EnhancedComponent1 !== EnhancedComponent2
 const EnhancedComponent = enhance(MyComponent);
 // 每一次都会使子对象树完全被卸载或移除
 return <EnhancedComponent />;
}
登入後複製

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

必須將靜態方法做拷貝


// 定义静态方法
WrappedComponent.staticMethod = function() {/*...*/}
// 使用高阶组件
const EnhancedComponent = enhance(WrappedComponent);

// 增强型组件没有静态方法
typeof EnhancedComponent.staticMethod === &#39;undefined&#39; // true
登入後複製

#Refs屬性不能傳遞

HoC中指定的ref,並不會傳遞到子元件,需要透過回呼函數使用props 傳遞。

相關推薦:

使用store來最佳化React元件

React元件之間的通訊的實例教學

HTML標籤與 React元件 比較_html/css_WEB-ITnose


以上是React 高階元件入門執行個體分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
一鍵生成PPT! Kimi :讓「PPT民工」先浪起來 一鍵生成PPT! Kimi :讓「PPT民工」先浪起來 Aug 01, 2024 pm 03:28 PM

Kimi:一句話,十幾秒鐘,一份PPT就新鮮出爐了。 PPT這玩意兒,可太招人煩了!開個碰頭會,要有PPT;寫個週報,要做PPT;拉個投資,要展示PPT;就連控訴出軌,都得發個PPT。大學比較像是學了個PPT專業,上課看PPT,下課做PPT。或許,37年前丹尼斯・奧斯汀發明PPT時也沒想到,有一天PPT竟然如此氾濫成災。嗎嘍們做PPT的苦逼經歷,說起來都是淚。 「一份二十多頁的PPT花了三個月,改了幾十遍,看到PPT都想吐」;「最巔峰的時候,一天做了五個PPT,連呼吸都是PPT」;「臨時開個會,都要做個

從裸機到700億參數大模型,這裡有一個教程,還有現成可用的腳本 從裸機到700億參數大模型,這裡有一個教程,還有現成可用的腳本 Jul 24, 2024 pm 08:13 PM

我們知道LLM是在大規模電腦叢集上使用海量資料訓練得到的,本站曾介紹過不少用於輔助和改進LLM訓練流程的方法和技術。而今天,我們要分享的是一篇深入技術底層的文章,介紹如何將一堆連作業系統也沒有的「裸機」變成用來訓練LLM的電腦叢集。這篇文章來自於AI新創公司Imbue,該公司致力於透過理解機器的思維方式來實現通用智慧。當然,將一堆連作業系統也沒有的「裸機」變成用於訓練LLM的電腦叢集並不是一個輕鬆的過程,充滿了探索和試錯,但Imbue最終成功訓練了一個700億參數的LLM,並在此過程中積累

AI在用 | AI製作獨居女孩生活Vlog,3天狂攬萬點讚量 AI在用 | AI製作獨居女孩生活Vlog,3天狂攬萬點讚量 Aug 07, 2024 pm 10:53 PM

機器之能報道編輯:楊文以大模型、AIGC為代表的人工智慧浪潮已經在悄悄改變我們生活及工作方式,但絕大部分人依然不知道該如何使用。因此,我們推出了「AI在用」專欄,透過直覺、有趣且簡潔的人工智慧使用案例,來具體介紹AI使用方法,並激發大家思考。我們也歡迎讀者投稿親自實踐的創新用例。影片連結:https://mp.weixin.qq.com/s/2hX_i7li3RqdE4u016yGhQ最近,獨居女孩的生活Vlog在小紅書上走紅。一個插畫風格的動畫,再配上幾句治癒系文案,短短幾天就能輕鬆狂攬上

快手可靈AI全球全面開放內測,模型效果再次升級 快手可靈AI全球全面開放內測,模型效果再次升級 Jul 24, 2024 pm 08:34 PM

7月24日,快手视频生成大模型可灵AI宣布基础模型再次升级,并全面开放内测。快手表示,为了让更多用户能使用可灵AI,更好满足创作者不同层次的使用需求,即日起,在全面开放内测的基础上,还将正式上线会员体系,针对不同类别的会员,提供相应的专属功能服务。同时,可灵AI的基础模型也再次迎来升级,进一步提升用户体验。基础模型效果再升级进一步提升用户体验发布一个多月以来,可灵AI已经多次升级迭代,随着本次会员体系的推出,可灵AI的基础模型效果再次迎来蜕变。首先是画面质量显著提升,通过升级后的基础模型生成的视

又一Sora級選手來炸街!我們拿它和Sora、可靈PK了下 又一Sora級選手來炸街!我們拿它和Sora、可靈PK了下 Aug 02, 2024 am 10:19 AM

當Sora「千呼萬喚」不出來時,OpenAI的對手們卻紛紛祭出大殺器來炸街。 Sora再不開放使用,真的要被偷家了!今日,舊金山新創公司LumaAI打出一手王牌,推出新一代AI影片生成模型DreamMachine。人人免費可用。據介紹,該模型能夠根據簡單的文字描述生成高品質、逼真視頻,效果堪比Sora。消息一出,大批用戶擠進官網嚐鮮。儘管官方聲稱該模型能在短短兩分鐘內生成120幀視頻,但由於訪問量激增,許多用戶在官網中苦苦等待數小時。 Luma的產品成長主管BarkleyDai不得不在Discord

為什麼學線代時不知道:矩陣與圖竟然存在等價關係 為什麼學線代時不知道:矩陣與圖竟然存在等價關係 Aug 19, 2024 pm 04:52 PM

矩陣很難理解,但換個視角或許會不一樣。在學習數學時,我們常因所學知識的難度和抽象而受挫;但有些時候,只要換個角度,我們就能為問題的解答找到一個簡單又直觀的解法。舉個例子,小時候在學習和的平方(a+b)²公式時,我們可能不理解為什麼它等於a²+2ab+b²,只知道書上這麼寫,老師讓這麼記;直到某天我們看見了這張動圖:登時恍然大悟,原來我們可以從幾何角度來理解它!現在,這種恍然大悟之感又出現了:非負矩陣可以等價地轉換成對應的有向圖!如下圖所示,左邊的3×3矩陣其實可

vue.js vs.反應:特定於項目的考慮因素 vue.js vs.反應:特定於項目的考慮因素 Apr 09, 2025 am 12:01 AM

Vue.js適合中小型項目和快速迭代,React適用於大型複雜應用。 1)Vue.js易於上手,適用於團隊經驗不足或項目規模較小的情況。 2)React的生態系統更豐富,適合有高性能需求和復雜功能需求的項目。

React在HTML中的作用:增強用戶體驗 React在HTML中的作用:增強用戶體驗 Apr 09, 2025 am 12:11 AM

React通過JSX與HTML結合,提升用戶體驗。 1)JSX嵌入HTML,使開發更直觀。 2)虛擬DOM機制優化性能,減少DOM操作。 3)組件化管理UI,提高可維護性。 4)狀態管理和事件處理增強交互性。

See all articles