中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

高級反應模式的五種方法

發(fā)布于:2021-02-03 11:05:20

0

167

0

反應 前端開發(fā) 模式 開發(fā)

  

我愛上了ReactJS,開始學習我能決定的東西。我開始看課程,寫代碼,讀文章。之后,我決定開始寫我從ReactJS社區(qū)和專家那里學到的東西。

React編程模式用于簡化大型React應用程序并使您的團隊體驗更輕松,這有助于您的團隊構(gòu)建單獨的組件并在它們之間共享邏輯。

閱讀本文后,您將了解更多有關(guān)現(xiàn)代React模式的信息,如復合組件、呈現(xiàn)道具、道具獲取程序、控制器道具、上下文API。

高級反應模式

軟件模式使您能夠使代碼更加可重用、通用。

復合成分

復合組件是一種在彼此內(nèi)部寫入元素的方法,但主要條件是內(nèi)部組件沒有它們的主父級就不能工作。

我們還可以將其定義為共享同一狀態(tài)共享同一父級和共享父級狀態(tài)。

我最喜歡的一個例子是tabs組件,當我開始學習ReactJS時,我已經(jīng)構(gòu)建了它。

  

如果您需要將內(nèi)容從父容器共享給它的子容器,則可以使用React.Children提供的實用程序來處理this.props.children。

  

但是,這種解決方案對于復合組件不夠靈活,因為當您更改零件的順序或?qū)⑺鼈儼b到另一個元素中時,它們現(xiàn)在將無法訪問道具,因為映射函數(shù)循環(huán)通過父組件中的第一級。

為了解決上述問題,我們需要另一種方法來共享組件之間的狀態(tài),如果插件的用戶更改了表示元素的方式,那么就不會中斷。我們可以使用ContextAPI在組件之間共享狀態(tài)。

使用上下文API的第一個元素稱為Provider,Provider元素是共享相同狀態(tài)的元素的包裝父元素。然后我們有了使用者,提供者內(nèi)的每個組件都可以使用它從提供者獲取或檢索值。

  

 

 對于以上代碼,這樣設(shè)置對象不是最佳做法,因為每次調(diào)用render方法時,它都會創(chuàng)建一個新引用和新對象。所以人們說要把這些東西放到組件狀態(tài)甚至回調(diào)中,以避免每次無需重新呈現(xiàn)。

 

  

請注意,consumer子級是傳遞給consumer的函數(shù),consumer將狀態(tài)提供給子級。

復合組件很有用,當我的用戶為組件時,不需要關(guān)心實現(xiàn)細節(jié)。例如,我們在父組件中檢查選項卡是否單擊。

我建議您自己嘗試一下,以了解更多有關(guān)如何在組件之間共享內(nèi)容的信息,下面是一個簡單的項目。嘗試讓它使用上下文API而不是反應。孩子們.

渲染道具

這種技術(shù)使用道具,這就是為什么它被稱為渲染道具。傳遞一個函數(shù)作為一個render方法,該方法返回ReactJS元素并用于呈現(xiàn)事物。

慣例是把它命名為渲染道具,但沒必要這樣稱呼它,有些人還用兒童道具作為函數(shù)。但是,作為函數(shù)傳遞的任何屬性都可以從另一個地方渲染對象,稱為“渲染道具”。

我的意思是道具是你的組件輸入。讓我在下一段代碼中向您展示一個示例。

  

查看組件的末尾。它是一個子組件,但不是將其用作{this.props.children},而是將其用作函數(shù),并傳遞給我們所需的參數(shù),以使組件的用戶為我們返回所需的組件。查看下面的代碼如何使用此組件。

 

不錯吧?你自己試試,把你的一個道具改成一個函數(shù),然后把你需要移動的東西傳給它。這個技巧允許您創(chuàng)建共享內(nèi)容,甚至不需要使用上下文API。

受控部件

控制是指你是一個誰負責改變自己的東西的狀態(tài)。其中一個著名的例子是你的表單輸入,當你傳遞一個道具值給你的“輸入”時,事情就變了。

現(xiàn)在,當用戶開始鍵入時,必須為輸入傳遞onChange事件,以確保在您的狀態(tài)下更改它。如果您在不更改狀態(tài)的情況下提供值屬性,則用戶輸入將永遠不會反映他輸入的實際文本。

這就是為什么它被稱為受控的,你可以控制更改并在另一個時間傳遞給你的輸入。

給出了一個很好的例子,比如當用戶點擊某個東西超過四次時,我需要給他一條消息,阻止他打字,如果我不是編寫組件的人,這種情況就不會發(fā)生。

 

 

對于我的標簽組件,我已經(jīng)改變了活動標簽現(xiàn)在是從道具,我不是誰控制它。我觸發(fā)一個事件,用戶單擊我的組件,而您自己更改活動選項卡。

狀態(tài)減速機

reducer是一個簡單的函數(shù),它接受輸入并返回輸出,而不改變應用程序的狀態(tài)。這種類型的服務稱為純函數(shù)。

用于為組件提供生成新狀態(tài)的函數(shù)的狀態(tài)縮減器取決于從縮減器返回的值。例如,在“我的選項卡”組件上,用戶將名為stateReducer的prop作為函數(shù)傳遞,而在“選項卡”組件中,如果狀態(tài)在“選項卡”組件中發(fā)生任何更改,我們將調(diào)用此函數(shù),并將其指定為新狀態(tài)。

這種模式與通過道具控制組件是一樣的,但是這次組件所有者向您發(fā)送舊狀態(tài)和更改,并讓您決定更改內(nèi)部狀態(tài)。

  

  

 

最后一段代碼用state reducer返回的值觸發(fā)狀態(tài)。你可以說這有點像redux中使用的減速機。

高階組件

高階組件是一個函數(shù),它接受ReactJS組件并在其上執(zhí)行一些邏輯,然后返回新的應用程序組件。這個模式在ReactJS的大多數(shù)庫中都使用。例如,redux使用它將道具從存儲頂層合并到任何組件。

另外,我在materialui中使用了它,將類對象傳遞給組件,或者擴展其應用程序組件的樣式。這種使用名為withStyle HOC的材質(zhì)UI編寫應用程序組件的方法。

  

結(jié)論

過了一段時間,我發(fā)現(xiàn)寫下你所學到的東西會讓你的信息更強大。嘗試一下這些模式,它們使您的組件變得獨特,特別是如果您是喜歡開放源碼社區(qū)的人之一的話。這些模式使您的組件更加可重用,有更多的人使用它。