目次
1. 結合力が高く、凝集力が低い。
2. 表示コンポーネントとコンテナ コンポーネント
3. 上から下への一方向のデータ フロー
4. 制御されたコンポーネントと制御されていないコンポーネント
制御されたコンポーネント:
非制御コンポーネント:
ホームページ ウェブフロントエンド jsチュートリアル コードをより美しくするために React コンポーネントを合理的に設計してください。 !

コードをより美しくするために React コンポーネントを合理的に設計してください。 !

Feb 13, 2021 am 09:10 AM

コードをより美しくするために React コンポーネントを合理的に設計してください。 !

react の目的は、フロントエンド ページをコンポーネント化し、ステート マシン思考モデルを使用してコンポーネントを制御することです。コンポーネント間には確実に関係があり、合理的なコンポーネント設計と各コンポーネントの適切な境界線の設定により、ページを再構築する際に他のコンポーネントへの影響を効果的に軽減できます。同時に、コードをより美しくすることもできます。

1. 結合力が高く、凝集力が低い。

高結合: 密接に関連する機能部分をコンテナ コンポーネントに配置し、index.js を外部に公開します。ディレクトリ構造は次のとおりです:

├── components
│   └── App
└── index.js
ログイン後にコピー

低結合: このコンポーネントが呼び出しページ上で直接削除しても影響は発生しません。不要な繰り返しレンダリングが減り、繰り返しレンダリング時の影響範囲が減ります。

2. 表示コンポーネントとコンテナ コンポーネント

##

ここで注目するのは this.props.children です。 this.props.children を通じて、コンポーネントの凝集度を簡単に低くすることができます。実際の開発では、純粋なコンポーネントで書かれた表示コンポーネントや、データを扱い続けるコンテナコンポーネントに遭遇することがよくあります。ここでは、単に this.props.children を使用してこれらのコンテナ コンポーネントをカバーします。その後、トラップされたコンテナ コンポーネントは、引き続き上記のルールに従って新しいフォルダーを作成し、index.js を公開できます。
この書き方の最大の利点は、作成したコンポーネントがどこにあるのか、何をするのか、何に影響を与えるのかをすぐに見つけられることです。

3. 上から下への一方向のデータ フロー

上記の条件を満たすように設計する必要がある場合、上から下への一方向のデータ フローを使用すると、何かを使用できるようになります。 redux のような状態管理ツールを使用すると、影響範囲をより制御しやすくなり、不要なレンダリングを減らすために shouldComponentUpdate が使用されます。 (ただし、このように書くのは本当に面倒ですが、React は v16.3 から新しいライフサイクル関数 getDerivedStateFromProps を使用して、開発者にこのステップの最適化を強制します)

4. 制御されたコンポーネントと制御されていないコンポーネント

コンポーネントは外部から変更できません
2プロパティを通じて値を設定する コンポーネントは、外部コントロールを通じてのみ更新できます。

制御されたコンポーネント:

制御された には value 属性が必要です。制御されたコンポーネントをレンダリングすると、value 属性の値が表示されます。
制御されたコンポーネントはそれ自体の内部状態を維持せず、コンポーネントのレンダリングは純粋に props に依存します。つまり、props を通じて値を設定する コンポーネントがある場合、入力方法に関係なく、props.value のみが表示されます。つまり、コンポーネントは読み取り専用です。
制御されたコンポーネントを扱うときは、常に value 属性を渡し、onChange コールバック関数を登録してコンポーネントを変数にする必要があります。

非制御コンポーネント:

value 属性のない は、非制御コンポーネントです。レンダリングされた要素を通じて、ユーザー入力は即座に反映されます。 Uncontrolled は、OnChange 関数を通じてユーザーが入力した変更を上位層にのみ通知できます。

# ハイブリッド コンポーネント:

props.value と state.value の値を同時に維持します。表示では props.value の方が優先され、state.value はコンポーネントの実際の値を表します。

5. 高次コンポーネント (HOC) を使用する


簡単な定義: React コンポーネントをパラメーターとして受け取り、別のコンポーネントを返す関数。
できること: コードの再利用、コードのモジュール化、プロパティの追加、削除、および変更

ユースケース: たとえば、会社が突然フロントエンド コードに別のクリック ポイントを埋めたい場合、次のようにすることができます。 hoc は、元の部分を変更せずに 1 つのレイヤーをラップするためのもので、同時にコードも適切に変更されています。

6. 追加、削除、変更、およびクエリの標準プロセス


追加: データを入力し、データを検証し、データを挿入し、データ リストを再クエリします。
削除: 削除を確認し、データ リストを再度クエリします。
Check: データ リストのクエリ、ページングでの表示

Change: データの入力、データの検証、データの変更、データ リストの再クエリ

実際には、その必要はありません。コンポーネントを設計するときに時期尚早にコンポーネント化すること。最初にバージョンをすばやく作成し、それを実際の設計に従って分割して、プロジェクトの初期段階での要件の急速な変化に対処できます。その後、デザインパターンに従って少しずつプロジェクトを変更していきますが、デザインパターンが適度に分割されていれば、実際には非常にスムーズで自然なことです。

プログラミング関連の知識について詳しくは、プログラミング ビデオ

をご覧ください。 ! ###
表示コンポーネント コンテナ コンポーネント
物事のプレゼンテーションに焦点を当てる 物事がどのように機能するかに焦点を当てる
プレゼンテーション コンポーネントとコンテナ コンポーネントが含まれる場合があり、通常は DOM タグと CSS が含まれます。スタイル プレゼンテーション コンポーネントとコンテナ コンポーネントが含まれる場合がありますが、DOM タグと CSS スタイルは含まれません
多くの場合、this.props.children を介して渡すことができます データを提供し、動作はコンテナ コンポーネントまたは表示コンポーネントに与えられます。
ストア アクションやフラックス アクションなどのサードパーティへの依存なしで フラックス アクションを呼び出して提供します。表示コンポーネントへのコールバック
データのロードおよび変更方法を指定しないでください データ ソースとして、通常、上位コンポーネントを書き込む代わりに使用します。 React Redux の connect()、Relay の createContainer()、Flux Utils の Container.create() など、自分自身の状態
独自の状態を持つことはほとんどありません。たとえあったとしても、それは独自のものです。 UI の状態

以上がコードをより美しくするために React コンポーネントを合理的に設計してください。 !の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? フロントエンドのサーマルペーパーレシートのために文字化けしたコード印刷に遭遇した場合はどうすればよいですか? Apr 04, 2025 pm 02:42 PM

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

誰がより多くのPythonまたはJavaScriptを支払われますか? 誰がより多くのPythonまたはJavaScriptを支払われますか? Apr 04, 2025 am 12:09 AM

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

javascriptの分解:それが何をするのか、なぜそれが重要なのか javascriptの分解:それが何をするのか、なぜそれが重要なのか Apr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? JavaScriptを使用して、同じIDを持つArray要素を1つのオブジェクトにマージする方法は? Apr 04, 2025 pm 05:09 PM

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は?
または:
Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Shiseidoの公式Webサイトのように、視差スクロールと要素のアニメーション効果を実現する方法は? または: Shiseidoの公式Webサイトのようにスクロールするページを伴うアニメーション効果をどのように実現できますか? Apr 04, 2025 pm 05:36 PM

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Console.log出力の違い結果:なぜ2つの呼び出しが異なるのですか? Apr 04, 2025 pm 05:12 PM

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

JavaScriptは学ぶのが難しいですか? JavaScriptは学ぶのが難しいですか? Apr 03, 2025 am 12:20 AM

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? フロントエンド開発でVSCodeと同様に、パネルドラッグアンドドロップ調整機能を実装する方法は? Apr 04, 2025 pm 02:06 PM

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...

See all articles