儘管React是世界上最受歡迎,最常用的前端框架之一,但許多開發人員在重構代碼以提高可重複性時仍在掙扎。如果您曾經發現自己在整個React應用程序中都重複了相同的代碼段,那麼您就可以使用正確的文章。
> 在本教程中,您將向您介紹三個最常見的指標,即該建立可重複使用的反應組件了。然後,我們將繼續通過構建可重複使用的佈局和兩個令人興奮的React掛鉤來查看一些實用的演示。>您完成閱讀時,當創建可重複使用的React組件是適當的時,您將能夠自己弄清楚
>>如何做到。 。 🎜> >本文假定對鉤子的基本知識。如果您想了解這些主題,我建議您查看“啟動React”指南和“ Intorduction tor React Hooks”。 > 鑰匙要點
可重複使用的反應組件的前三個指標
>包裝器>? >? 例如,請考慮以下登錄頁和註冊頁:
>
<span>// Login.js </span><span>import './common.css'; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>>將相同的樣式應用於容器(
<span>// SignUp.js </span><span>import './common.css'; </span> <span>function <span>Signup</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>>
結果,您不再需要在多個頁面中導入common.css或創建相同的
<span>// Login.js </span><span>import <span>Footer</span> from "./Footer.js"; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><Wrapper</span> main<span>={{...}}</span> footer<span>={<span><span><Footer</span> /></span>}</span> /></span> </span> <span>); </span><span>} </span>
要將事件偵聽器附加到元素上,您可以在usefeft()內部處理它:
>
<span>// App.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>function <span>App</span>() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span> <span>return (...); </span><span>} </span>>要將事件偵聽器添加到文檔或窗口時,您必須使用第一個方法。但是,正如您可能已經意識到的那樣,第一種方法需要使用usefeff(),addeventListener()和removeeventListener()()使用更多代碼。因此,在這種情況下,創建自定義掛鉤將使您的組件更加簡潔。
>
有四種可能使用事件偵聽器的情況:<span>// Button.js </span><span>function <span>Button</span>() { </span> <span>return ( </span> <span><span><span><button</span> type<span>="button"</span> onClick<span>={() => { alert('Hi!')}}</span>></span> </span><span> Click me! </span><span> <span><span></button</span>></span> </span> <span>); </span><span>}; </span>
>同一事件偵聽器,同一事件處理程序
同一事件偵聽器,不同的活動處理程序
然後,您可以在任何組件中使用此鉤子,如下所示:
<span>// useEventListener.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>export default function useKeydown() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span><span>}; </span>
<span>// Login.js </span><span>import './common.css'; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>
>在使GraphQl代碼重複使用時,您實際上不需要尋找符號。對於復雜的應用程序,用於查詢或突變的GraphQL腳本很容易占用30-50行代碼,因為有許多屬性需要請求。如果您多次或兩次使用相同的GraphQl腳本,我認為它值得擁有自己的自定義鉤。
考慮以下示例:
<span>// SignUp.js </span><span>import './common.css'; </span> <span>function <span>Signup</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>>而不是在每個頁面中重複此代碼的後端請求帖子,而是應該為此特定的API創建一個React Hook:
構建三個可重複使用的反應組件
<span>// Login.js </span><span>import <span>Footer</span> from "./Footer.js"; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><Wrapper</span> main<span>={{...}}</span> footer<span>={<span><span><Footer</span> /></span>}</span> /></span> </span> <span>); </span><span>} </span>
1。佈局組件 React通常用於構建複雜的Web應用程序。這意味著需要在React中開發大量頁面,我懷疑應用程序的每個頁面都有不同的佈局。例如,由30頁組成的Web應用程序通常使用少於五個不同的佈局。因此,建立一個可以在許多不同頁面中使用的靈活,可重複使用的佈局至關重要。這將為您節省很多代碼行,並因此有大量的時間。 >
考慮以下反應功能組件:這是一個典型的網頁,它具有
>相反,您可以創建一個佈局組件,該組件像props一樣,接收
<span>// App.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>function <span>App</span>() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span> <span>return (...); </span><span>} </span>此組件不需要
使用此佈局組件,您可以將feed頁面變成更複雜的代碼塊:
>用於創建帶有粘性元素的佈局的Pro提示
<span>// Button.js </span><span>function <span>Button</span>() { </span> <span>return ( </span> <span><span><span><button</span> type<span>="button"</span> onClick<span>={() => { alert('Hi!')}}</span>></span> </span><span> Click me! </span><span> <span><span></button</span>></span> </span> <span>); </span><span>}; </span>許多開發人員傾向於使用位置:固定或位置:絕對是要將標頭貼在視口頂部或頁腳到底部的人時。但是,在佈局的情況下,您應該嘗試避免這種情況。
>
>由於佈局的元素將是經過的道具的父元素,因此您希望將佈局元素的樣式保持盡可能簡單 - 因此,通過。
這是一個示例:<span>// useEventListener.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>export default function useKeydown() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span><span>}; </span>
<span>// Login.js </span><span>import './common.css'; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>
現在,讓我們在供稿頁面上應用一些樣式,看看您已經構建了什麼:
<span>// SignUp.js </span><span>import './common.css'; </span> <span>function <span>Signup</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>>粘性標頭和頁腳演示
>
這就是桌面屏幕上的外觀。
這就是移動屏幕上的外觀。
>此佈局也按照iOS設備的意圖工作!如果您不知道,iOS臭名昭著,因為它將與位置相關的意外問題帶來了Web應用程序的開發。
2。事件聽眾
>您可以看到usesCrollSaver Hook需要接收兩個項目:ScrollableDiv,它必須是一個可滾動容器,就像上面佈局中的
步驟1:保存滾動位置
<span>// Login.js </span><span>import <span>Footer</span> from "./Footer.js"; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><Wrapper</span> main<span>={{...}}</span> footer<span>={<span><span><Footer</span> /></span>}</span> /></span> </span> <span>); </span><span>} </span>
首先,您需要將“滾動”事件偵聽器綁定到可滾動容器:
<span>// Login.js </span><span>import './common.css'; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>
>用戶回到網頁時,應將用戶直接定向到他或她以前的滾動位置 - 如果有的話。該位置數據當前保存在SessionStorage中,您需要將其取出並使用它。您可以使用GetItem(ID:String)從存儲中獲取數據。然後,您只需要將可滾動容器的滾動滾動式設置為此獲得的值:
<span>// SignUp.js </span><span>import './common.css'; </span> <span>function <span>Signup</span>() { </span> <span>return ( </span> <span><span><span><div</span> className<span>='wrapper'</span>></span> </span><span> <span><span><main</span>></span> </span><span> {...} </span><span> <span><span></main</span>></span> </span><span> <span><span><footer</span> className<span>='footer'</span>></span> </span><span> {...} </span><span> <span><span></footer</span>></span> </span><span> <span><span></div</span>></span> </span> <span>); </span><span>} </span>>步驟3:在任何網頁中使用uses crollsaver鉤
scrollsaver demo
<span>// Login.js </span><span>import <span>Footer</span> from "./Footer.js"; </span> <span>function <span>Login</span>() { </span> <span>return ( </span> <span><span><span><Wrapper</span> main<span>={{...}}</span> footer<span>={<span><span><Footer</span> /></span>}</span> /></span> </span> <span>); </span><span>} </span>
,如果您喜歡像我一樣將GraphQl與React一起使用,則可以通過為GraphQl查詢或突變創建React Hook進一步減少代碼庫。
如果從後端請求越來越多的屬性,則您的GraphQL腳本將佔用越來越多的空間。因此,您可以創建以下React Hook:
然後,您可以使用usegetPosts()掛鉤如下:
<span>// App.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>function <span>App</span>() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span> <span>return (...); </span><span>} </span>結論
在本文中,您已經了解了可重複使用的反應組件的三個最常見指標和三種最受歡迎的用途案例。現在,當您可以創建可重複使用的反應組件時,您已經了解了
>的知識,並且<span>// Button.js </span><span>function <span>Button</span>() { </span> <span>return ( </span> <span><span><span><button</span> type<span>="button"</span> onClick<span>={() => { alert('Hi!')}}</span>></span> </span><span> Click me! </span><span> <span><span></button</span>></span> </span> <span>); </span><span>}; </span>>如何輕鬆,專業地進行。您很快就會發現自己喜歡將代碼的重構行納入精緻的可重複使用的反應組件或鉤子中。使用這些重構技術,我們在Clay的開發團隊能夠將我們的代碼庫減少到可管理的尺寸。我也希望你也可以!
>
<span>// useEventListener.js </span><span>import <span>{ useEffect }</span> from 'react'; </span> <span>export default function useKeydown() { </span> <span>const handleKeydown = () => { </span> <span>alert('key is pressed.'); </span> <span>} </span> <span>useEffect(() => { </span> <span>document.addEventListener('keydown', handleKeydown); </span> <span>return () => { </span> <span>document.removeEventListener('keydown', handleKeydown); </span> <span>} </span> <span>}, []); </span><span>}; </span>關於創建可重複使用的React組件的FAQ
可重用性不僅節省了時間和精力,而且還簡化了測試過程。隔離和封裝的組件更易於測試,您可以創建單元測試以驗證其正確性和功能。通過將可重複使用的組件納入您的反應應用程序,您可以建立可維護,模塊化和一致的代碼庫,最終提高開發效率並提高用戶界面的整體質量。
>從'react''; 在此新組件文件中,您定義了組件的行為和渲染邏輯。組件可以根據您的需求而具有功能性或基於班級的功能。在參數化組件時,您將道具接受為輸入,這使您可以自定義其外觀和行為。使用Proptypes或Typescript定義道具類型可確保類型的安全性和清晰度,從而更容易理解應如何使用組件。構建組件後,就可以在應用程序的其他部分中使用。您可以導入並合併它,並通過特定的道具為每個用例配置其行為。 模塊化是另一個關鍵屬性。良好的可重複使用的組件應該具有單一的目的,重點是特定功能或特定的UI元素。這種模塊化設計增強了代碼可維護性和調試效率。此外,易於測試至關重要。
const button =({label,onclick,style})=> { 🎜>
);
};在此示例中,
>
導出默認按鈕;
在此示例中,按鈕組件被構造為功能組件,該功能組件採用三個關鍵道具:用於按鈕上顯示的文本的“標籤”,“ onclick”,for for for。點擊事件處理程序和可選的“樣式”道具,用於自定義按鈕的外觀。該組件封裝了按鈕的HTML結構和行為,使其在整個應用程序中都可以輕鬆地重複使用,而無需重複代碼。
>使用此按鈕組件的用法顯示其可重複使用性和靈活性。在父組件(在這種情況下為“應用程序”)中,您可以傳遞特定標籤文本,單擊事件處理功能和样式偏好,以創建具有不同目的和外觀的不同按鈕。通過使用此類可重複使用的組件,您可以維護統一的用戶界面樣式並提高代碼可維護性。這些組件可以擴展到按鈕之外,以包含更複雜的UI元素,例如輸入字段,卡片或導航欄,從而產生模塊化和可維護的React應用程序。可重複使用的組件不僅會加快開發的速度,而且會導致更一致,用戶友好的界面,該界面遵循設計準則和最佳實踐。 如何在React中創建可重複使用的組件?
在React.js中創建可重複使用的組件是構建模塊化和可維護應用程序的基礎實踐。該過程從一個明確的計劃開始,您可以在其中確定要封裝在組件中的特定功能或用戶界面(UI)元素。定義組件的目的後,您將在React項目中創建一個新的JavaScript/JSX文件。這是一個很好的做法,可以用大寫字母開始命名文件,並遵守React的命名慣例。
結果是一個更有條理的代碼庫,可鼓勵代碼可重複使用並保持一致的UI樣式。可重複使用的組件可以輕鬆地集成到應用程序的不同部分,提高開發效率,並為用戶友好和視覺上一致的用戶界面做出貢獻。 REACT中可重複使用的組件的好處是什麼?
React中可重複使用的組件可重複使用的組件提供了許多好處,可顯著增強開發過程和應用質量。它們通過將復雜的用戶界面分解為較小的,獨立的構件來促進模塊化,從而使代碼庫更有條理和可維護。這些組件側重於特定功能或UI元素,使開發人員能夠獨立管理和更新它們,從而降低了意外副作用的風險並簡化了開發過程。
是什麼使React中的可重複使用的組件?
反應中精心設計的可重複使用的成分錶現出多種關鍵特徵。首先,可重複使用性是核心屬性。這些組件應以在應用程序的不同部分甚至在單獨的項目中使用。為了實現這一目標,必須高度參數化,使開發人員可以通過道具自定義其外觀和行為。這種多功能性是使組件真正可重複使用的基本方面。
封裝同樣重要。可重複使用的組件應封裝其內部邏輯和渲染,從而將實現詳細信息從應用程序的其餘部分中屏蔽。這種關注點的分離導致更清潔,更模塊化的代碼並簡化集成。
最終,這些組件應保持清晰的API,指定他們接受的道具及其預期目的。這種清晰度可幫助其他開發人員了解如何有效使用組件。當將相同的組件用於特定的UI元素時,通過一致的用戶界面做出貢獻,它們可以確保具有凝聚力和用戶友好的應用程序。從本質上講,一個良好的可重複使用組件是可重新配置的,封裝的,模塊化的,易於測試的,並有助於代碼可維護性和UI一致性。
>
以上是創建可重複使用的反應組件的實用指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!