「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > React アプリの基本的なデザイン パターン: コンポーネント ゲームのレベルアップ

React アプリの基本的なデザイン パターン: コンポーネント ゲームのレベルアップ

2024 年 9 月 28 日に公開
ブラウズ:531

Essential Design Patterns for React Apps: Leveling Up Your Component Game

React の世界にしばらく関わったことがある人なら、おそらく「それは単なる JavaScript です」というフレーズを聞いたことがあるでしょう。それは事実ですが、React アプリをより保守しやすく、再利用しやすく、実に快適に操作できるようにするために、実証済みのパターンの恩恵を受けられないというわけではありません。 React コンポーネントを「まあまあ」から「素晴らしい」レベルに引き上げる重要な設計パターンをいくつか見てみましょう!

React でデザインパターンが重要な理由

本題に入る前に、部屋の中の象について話しましょう。そもそも、なぜデザイン パターンにこだわる必要があるのでしょうか。 React 愛好家の皆さん、デザイン パターンはコーディングの世界の秘密のレシピのようなものです。これらは、次のような一般的な問題に対する、実証済みのソリューションです。

  1. コードをより読みやすく、保守しやすくする
  2. アプリケーション全体での再利用性を促進
  3. 洗練されたソリューションで複雑な問題を解決
  4. 他の開発者とのアイデアのコミュニケーションをより効果的に行うのに役立ちます

同じページに到達したので、React コンポーネントをワックスをかけたてのスポーツカーよりも明るく輝かせるいくつかのパターンを探ってみましょう!

1. コンポーネントの構成パターン

React のコンポーネント モデルは、それ自体がすでに強力なパターンですが、さらに一歩進めて構成することで、より柔軟で再利用可能なコードを作成できます。

// Instead of this:
const Button = ({ label, icon, onClick }) => (
  
);

// Consider this:
const Button = ({ children, onClick }) => (
  
);

const IconButton = ({ icon, label }) => (
  
);

なぜ素晴らしいのか:

  • より柔軟で再利用可能なコンポーネント
  • カスタマイズと拡張が簡単になりました
  • 単一責任の原則に従います

プロのヒント: コンポーネントをレゴ ブロックとして考えてください。モジュール式で構成可能であればあるほど、より素晴らしい構造を構築できるようになります!

2. コンテナ/プレゼンテーションのパターン

このパターンは、コンポーネントのロジックをプレゼンテーションから分離し、推論とテストを容易にします。

// Container Component
const UserListContainer = () => {
  const [users, setUsers] = useState([]);

  useEffect(() => {
    fetchUsers().then(setUsers);
  }, []);

  return ;
};

// Presentational Component
const UserList = ({ users }) => (
  
    {users.map(user => (
  • {user.name}
  • ))}
);

なぜ素晴らしいのか:

  • 関心事の明確な分離
  • テストと保守が簡単になる
  • プレゼンテーションコンポーネントの再利用性を促進します

覚えておいてください: コンテナは演劇の舞台裏スタッフのようなもので、すべての舞台裏の作業を処理します。一方、プレゼンテーション コンポーネントは俳優であり、観客に見栄えを良くすることだけに重点を置いています。

3. 高次コンポーネント (HOC) パターン

HOC は、コンポーネントを受け取り、いくつかの機能が追加された新しいコンポーネントを返す関数です。コンポーネントのパワーアップのようなものです!

const withLoader = (WrappedComponent) => {
  return ({ isLoading, ...props }) => {
    if (isLoading) {
      return ;
    }
    return ;
  };
};

const EnhancedUserList = withLoader(UserList);

なぜクールなのか:

  • さまざまなコンポーネント間でコードを再利用できます
  • コンポーネントをクリーンかつ集中的に保ちます
  • 複数の強化用に合成可能

注意: HOC は強力ですが、使いすぎると「ラッパー地獄」に陥る可能性があります。賢く使ってください!

4. レンダープロップパターン

このパターンには、関数をプロップとしてコンポーネントに渡すことが含まれており、レンダリングされる内容をより詳細に制御できるようになります。

const MouseTracker = ({ render }) => {
  const [position, setPosition] = useState({ x: 0, y: 0 });

  const handleMouseMove = (event) => {
    setPosition({ x: event.clientX, y: event.clientY });
  };

  return (
    
{render(position)}
); }; // Usage (

The mouse is at ({x}, {y})

)} />

それが気の利いた理由:

  • 柔軟性が高く再利用可能
  • プロップ名の衝突などの HOC の問題を回避します
  • 提供された関数に基づいて動的レンダリングを可能にします

面白い事実: レンダー プロップ パターンは非常に柔軟で、これまで説明してきた他のほとんどのパターンも実装できます。

5. カスタムフックパターン

フックは React の新しい要素であり、カスタム フックを使用すると、コンポーネント ロジックを再利用可能な関数に抽出できます。

const useWindowSize = () => {
  const [size, setSize] = useState({ width: 0, height: 0 });

  useEffect(() => {
    const handleResize = () => {
      setSize({ width: window.innerWidth, height: window.innerHeight });
    };

    window.addEventListener('resize', handleResize);
    handleResize(); // Set initial size

    return () => window.removeEventListener('resize', handleResize);
  }, []);

  return size;
};

// Usage
const MyComponent = () => {
  const { width, height } = useWindowSize();
  return 
Window size: {width} x {height}
; };

なぜ素晴らしいのか:

  • コンポーネント間でステートフル ロジックを簡単に共有できます
  • コンポーネントをクリーンかつ集中的に保ちます
  • HOC の多くの使用法を置き換えてプロップをレンダリングできます

プロのヒント: 複数のコンポーネントで同様のロジックを繰り返していることに気付いた場合は、それをカスタム フックに抽出する時期が来ている可能性があります!

結論: パターンで React アプリをパワーアップする

React のデザイン パターンは、ガジェットが詰まったユーティリティ ベルトを持っているようなものです。アプリがどのような課題に直面しても、仕事に適したツールを提供します。覚えて:

  1. 柔軟なモジュール式 UI にコンポーネント構成を使用する
  2. コンテナ/プレゼンテーションを活用して懸念事項を明確に分離
  3. 横断的な懸念事項に対して HOC を採用する
  4. レンダリング プロップを活用して究極の柔軟性を実現
  5. ステートフル ロジックを共有するカスタム フックを作成する

これらのパターンを React ツールキットに組み込むことで、より保守しやすく、再利用可能で、洗練されたコンポーネントを作成できるようになります。将来のあなた (そしてあなたのチームメイト) が、あなたのよく構造化されたコードベースをスムーズに読み進められたら、あなたに感謝するでしょう!

コーディングを楽しんでください!

リリースステートメント この記事は次の場所に転載されています: https://dev.to/alessandrorodrigo/essential-design-patterns-for-react-apps-leveling-up-your-component-game-l8c?1 侵害がある場合は、study_golang にご連絡ください。 @163.com 削除
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3