Reactは世界で最も人気があり、最も使用されているフロントエンドフレームワークの1つですが、多くの開発者は、再利用性の向上のためにコードをリファクタリングすることに関して苦労しています。 Reactアプリ全体で同じコードのスニペットを繰り返していることに気付いたことがあるなら、あなたは正しい記事に登場しました。 このチュートリアルでは、再利用可能なReactコンポーネントを構築する時が来たという3つの最も一般的な指標を紹介します。次に、再利用可能なレイアウトと2つのエキサイティングな反応フックを構築することで、いくつかの実用的なデモを見てみます。
読みが終わった頃には、再利用可能な反応成分を作成することが適切であるとき、自分で把握できるようになります。 🎜>この記事では、ReactとReactフックの基本的な知識を想定しています。これらのトピックをブラッシュアップしたい場合は、「Reactの始めましょう」ガイドと「React Fooks to React Hooks」をチェックすることをお勧めします。
キーテイクアウト再利用可能性の機会を特定する:この記事では、再利用可能な反応成分を作成する必要性を示す3つの一般的な兆候を紹介します:ラッパーの繰り返しCSSスタイル、同一のイベントリスナーの頻繁な使用、および同じGraphQLクエリまたは突然変異の繰り返し実装。このガイダンスは、開発者が再利用可能なコンポーネントに繰り返しコードを抽出できることを認識し、アプリケーションの保守性とスケーラビリティを改善できるのに役立ちます。
実用的なデモンストレーションと実装:詳細な例を通じて、この記事では、レイアウトコンポーネント、イベントリスナーの管理用のカスタムReactフック、GraphQLクエリ用のフックなど、再利用可能なコンポーネントの構築に関する実用的なデモンストレーションを提供します。これらの例は、開発者が従うべき青写真として機能し、開発を合理化してアプリケーション全体で一貫性を確保するために、独自のプロジェクトに同様のパターンを適用できるようにします。
まず、
ラッパー? たとえば、
次のログインページとサインアップページを検討してください
<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>
次のボタンコンポーネントで示されているように、
またはこのようにJSXの内側に直接行うことができます。イベントリスナーを使用するための4つのシナリオがあります:
<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>
さまざまなイベントリスナー、同じイベントハンドラー
さまざまなイベントリスナー、さまざまなイベントハンドラー
次のように、任意のコンポーネントでこのフックを使用できます。
<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>
次の例を考えてみましょう
バックエンドから投稿を要求するすべてのページでこのコードを繰り返す代わりに、この特定のAPIのReactフックを作成する必要があります:
<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つの再利用可能な反応コンポーネントを構築します
<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アプリは通常、5つの異なるレイアウトを使用します。したがって、さまざまなページで利用できる柔軟で再利用可能なレイアウトを構築することが不可欠です。これにより、非常に多くのコードを節約でき、その結果、非常に時間がかかります。
次の反応機能成分を検討してください:これは、
このコンポーネントは
<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>
多くの開発者は、位置を使用する傾向があります。固定または位置:絶対的なものは、ビューポートの上部にヘッダーを貼り付けたり、フッターを下に貼り付けたりする場合です。ただし、レイアウトの場合、これを避けるようにしてください。
レイアウトの要素はパスされたプロップの親要素になるため、レイアウト要素のスタイルを可能な限りシンプルに保ちます。意図したとおり。したがって、私は位置を適用することをお勧めします:固定と表示:レイアウトの最も外側の要素にフレックスし、Overflow-yを設定します:
<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>
そして、これが動作中のコードです。
これは、デスクトップ画面でどのように見えるかです。
これは、モバイル画面でどのように見えるかです。
2。イベントリスナー
多くの場合、同じイベントリスナーがWebアプリ全体で複数回使用されます。そのような場合、カスタムReactフックを作成することは素晴らしいアイデアです。ユーザーのデバイスのスクロール位置をページに保存するUseSscrollsaverフックを開発することで、これを行う方法を学びましょう。このフックは、投稿やコメントなどの多数の要素がリストされているWebページに役立ちます。 Scroll SaverのないFacebook、Instagram、Twitterのフィードページを想像してください。ステップ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>
今度は、スクロールドーブルがユーザーによってスクロールされるたびに、HandlesCrollという関数が実行されます。この関数では、localStorageまたはsessionStorageのいずれかを利用して、スクロール位置を保存する必要があります。違いは、LocalStorageのデータが期限切れにならないのに対し、Page Sessionが終了するとSessionStorageのデータがクリアされることです。 setItem(id:string、value:string)を使用して、どちらのストレージでもデータを保存できます。
<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>
ユーザーがWebページに戻った場合、ユーザーは以前のスクロール位置に向けられる必要があります。このポジションデータは現在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>
scrollsaverデモ
<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>
私と同様に、factでgraphqlを使用したい場合は、graphqlクエリまたは突然変異のReactフックを作成することでコードベースをさらに減らすことができます。
バックエンドからリクエストする属性がますますある場合、GraphQLスクリプトはますます多くのスペースを占有します。したがって、クエリGetPosts()を実行する必要があるたびにGraphQLスクリプトを繰り返して使用する代わりに、次のReactフックを作成できます。
次のように、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>
>の知識と、
<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>
再利用可能な反応コンポーネントの作成に関するFAQ
Reactの再利用可能なコンポーネントの一般的な例は、「ボタン」コンポーネントです。ボタンはユーザーインターフェイスの基本的な部分であり、さまざまなインタラクションにアプリケーション全体で使用されます。 Reactで再利用可能なボタンコンポーネントを作成すると、コードの複製を減らしながら、一貫した外観と動作を維持できます。再利用可能なボタンコンポーネントの簡単な例は次のとおりです。
「react」からReactをインポート;
const button =({label、onclick、style})=> {
return(
);
};
デフォルトボタンのエクスポート;
この例では、ボタンコンポーネントは、ボタンに表示されるテキストの「ラベル」の3つの重要なプロップを取得する機能コンポーネントとして構築されています。クリックイベントハンドラー、およびボタンの外観をカスタマイズするためのオプションの「スタイル」プロップ。このコンポーネントは、ボタンのHTML構造と動作をカプセル化するため、コードを複製する必要なく、アプリケーション全体で簡単に再利用できます。親コンポーネント(この場合は「APP」)では、特定のラベルテキストを渡し、イベント処理関数とスタイルの設定をクリックして、さまざまな目的と外観を持つさまざまなボタンを作成できます。このような再利用可能なコンポーネントを使用することにより、統一されたユーザーインターフェイススタイルを維持し、コードメンテナビリティを向上させます。これらのコンポーネントは、ボタンを超えて拡張して、入力フィールド、カード、ナビゲーションバーなどのより複雑なUI要素を含み、モジュラーで保守可能なReactアプリケーションをもたらします。再利用可能なコンポーネントは、開発を促進するだけでなく、ガイドラインとベストプラクティスの設計に準拠する、より一貫したユーザーフレンドリーなインターフェイスにもつながります。
React.jsで再利用可能なコンポーネントの作成は、モジュール式および保守可能なアプリケーションを構築するための基礎的な慣行です。このプロセスは、コンポーネント内でカプセル化する特定の機能またはユーザーインターフェイス(UI)要素を識別する明確な計画から始まります。コンポーネントの目的を定義したら、Reactプロジェクト内で新しいJavaScript/JSXファイルを作成します。 Reactの命名規則を順守して、大文字の文字から始まるファイルに名前を付けることをお勧めします。 再利用可能なコンポーネントの主な利点は、時間と時間を節約することです。努力。アプリケーションのさまざまな部分で同じコンポーネントを使用したり、さまざまなプロジェクトで使用して、同様のコードを書き換える必要性を排除できます。これにより、開発が加速するだけでなく、一貫したユーザーインターフェイスが保証されます。一貫性は別の重要な利点です。特定のUI要素に同じコンポーネントを使用することにより、均一な外観と動作を維持し、ガイドラインを設計し、ユーザーエクスペリエンスを改善することを順守します。 反応の適切に設計された再利用可能なコンポーネントは、いくつかの重要な特性を示します。何よりもまず、再利用性がコア属性です。これらのコンポーネントは、アプリケーションのさまざまな部分で使用されることを目的として、または別々のプロジェクトで作成する必要があります。これを達成するには、高度にパラメーター化されている必要があり、開発者が小道具を通じて外観と行動をカスタマイズできるようにします。この汎用性は、コンポーネントを本当に再利用可能にするものの基本的な側面です。
結果は、コードの再利用性を促進し、一貫したUIスタイルを維持するより組織化されたコードベースです。再利用可能なコンポーネントは、アプリケーションのさまざまな部分に簡単に統合でき、開発効率を高め、ユーザーフレンドリーで視覚的に一貫したユーザーインターフェイスに貢献できます。反応の再利用可能なコンポーネントの利点は何ですか?
Reactの再利用可能なコンポーネントは、開発プロセスとアプリケーションの品質を大幅に向上させる多数の利点を提供します。複雑なユーザーインターフェイスをより小さな自己完結型のビルディングブロックに分解し、コードベースをより整理し、保守可能にすることにより、モジュール性を促進します。これらのコンポーネントは、特定の機能またはUI要素に焦点を当て、開発者が独立してそれらを管理および更新できるようにするため、意図しない副作用のリスクを軽減し、開発プロセスを合理化します。
さらに、再利用可能なコンポーネントは高度にカスタマイズ可能です。彼らは、開発者が異なるユースケースに合わせて行動と外観を微調整できるようにする小道具を受け入れます。このパラメーター化により、コンポーネントの柔軟性と汎用性が向上します。問題が発生すると、これらの孤立したコンポーネントはテストとデバッグが簡単で、効率的な問題解決が可能になります。さらに、プロジェクト間でコンポーネントを共有および再利用することにより、チームはより効果的に協力し、統一されたUIスタイルを維持し、コードの一貫性を確保することができます。これは、大規模および長期的な開発努力に不可欠です。要約すると、React Streamlineの開発における再利用可能なコンポーネント、コードの再利用性を促進し、UIの一貫性を維持し、カスタマイズ可能性を提供し、最終的にはより効率的で高品質のアプリケーションにつながります。反応で再利用可能なコンポーネントを作るのは何ですか?
カプセル化も同様に重要です。再利用可能なコンポーネントは、内部ロジックとレンダリングをカプセル化し、アプリケーションの残りの部分から実装の詳細を保護する必要があります。この懸念の分離は、よりクリーンでよりモジュール化されたコードにつながり、統合を簡素化します。優れた再利用可能なコンポーネントには、特定の機能または特定のUI要素に焦点を当てた特異な目的が必要です。このモジュラー設計により、コードの保守性とデバッグ効率が向上します。さらに、テストの容易さが不可欠です。孤立したコンポーネントはテストが容易で、堅牢で信頼性の高いコードの作成を促進します。
以上が再利用可能な反応成分を作成するための実用的なガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。