ホームページ >ウェブフロントエンド >jsチュートリアル >React でのデザインパターン [HOC、レンダープロップ、フック]

React でのデザインパターン [HOC、レンダープロップ、フック]

PHPz
PHPzオリジナル
2024-08-06 10:08:22896ブラウズ

Padrões de Projeto em React [HOCs, Render Props, Hooks]

導入

デザイン パターンは、ソフトウェア開発における一般的な問題に対する実証済みの解決策です。 React では、これらのパターンを適用すると、コードがよりモジュール化され、再利用可能になり、保守が容易になります。この記事では、React で最も一般的で便利な設計パターンのいくつか、つまり高次コンポーネント (HOC)、レンダー プロップ、およびフックについて説明します。

1. 高次コンポーネント (HOC)

高次コンポーネント (HOC) は、コンポーネントを受け取り、追加機能を備えた新しいコンポーネントを返す関数です。これらは、複数のコンポーネントに共通のロジックを追加するためによく使用されます。

HOCの例

ボタンをクリックするだけでログ機能を追加する簡単な HOC を作成してみましょう:

import React from 'react';

// Higher Order Component
const withLogger = (WrappedComponent) => {
  return class extends React.Component {
    handleClick = () => {
      console.log('Button clicked!');
    };

    render() {
      return <WrappedComponent onClick={this.handleClick} {...this.props} />;
    }
  };
};

// Componente Original
const Button = ({ onClick, children }) => (
  <button onClick={onClick}>{children}</button>
);

// Componente Envolvido com HOC
const ButtonWithLogger = withLogger(Button);

export default ButtonWithLogger;

2. 小道具をレンダリングする

Render Props は、値が関数であるプロップを使用してコンポーネント間でロジックを共有できるようにする手法です。この関数は、コンテンツのレンダリングに必要なデータを受け取ります。

レンダープロップの例

可視性の状態を管理し、レンダリング プロパティを通じてこのロジックを提供するコンポーネントを作成しましょう:

import React, { useState } from 'react';

// Componente de Render Props
const Toggle = ({ children }) => {
  const [isVisible, setIsVisible] = useState(false);

  const toggleVisibility = () => setIsVisible(!isVisible);

  return children({ isVisible, toggleVisibility });
};

// Componente que utiliza Render Props
const App = () => (
  <Toggle>
    {({ isVisible, toggleVisibility }) => (
      <div>
        <button onClick={toggleVisibility}>Toggle</button>
        {isVisible && <p>Content is visible</p>}
      </div>
    )}
  </Toggle>
);

export default App;

3. フック

フックは React に最近追加されたもので、クラスを作成せずに状態やその他の React 機能を使用できるようにします。これらは、HOC や Render Props に代わる強力かつ柔軟な代替手段です。

カスタムフックの例

可視性の状態を管理するカスタム フックを作成しましょう:

import { useState } from 'react';

// Hook Personalizado
const useToggle = (initialState = false) => {
  const [isVisible, setIsVisible] = useState(initialState);

  const toggleVisibility = () => setIsVisible(!isVisible);

  return [isVisible, toggleVisibility];
};

// Componente que utiliza o Hook
const App = () => {
  const [isVisible, toggleVisibility] = useToggle();

  return (
    <div>
      <button onClick={toggleVisibility}>Toggle</button>
      {isVisible && <p>Content is visible</p>}
    </div>
  );
};

export default App;

HOC、レンダー プロップ、フックの比較

  • 高次コンポーネント (HOC):

    • 使用する場合: コードを変更せずに、複数のコンポーネントに動作を追加します。
    • 利点: ロジックの再利用、懸念事項の分離。
    • 欠点: コンポーネントの過剰なネスト (ラッパー地獄) が発生する可能性があります。
  • プロップをレンダリング:

    • 使用する場合: コンポーネント間で複雑なロジックを共有します。
    • 利点: コンポーネント構成の柔軟性。
    • 欠点: コードが冗長になり、読みにくくなる可能性があります。
  • フック:

    • 使用する場合: 機能コンポーネントの状態と副作用を管理します。
    • 利点: シンプルさ、簡潔さ、構成の容易さ。
    • 欠点: フック API に精通している必要があります。

結論

React の各設計パターンには、独自の使用例と利点があります。 Higher Order Components (HOC) は複数のコンポーネントに共通の動作を追加するのに役立ちますが、Render Props を使用すると複雑なロジックを柔軟に共有できます。フックは、機能コンポーネントの状態と副作用を管理するためのシンプルかつ強力な方法を提供します。適切なパターンの選択は、プロジェクト固有のニーズとチームの好みによって異なります。

これらの設計パターンを React アプリケーションに実装すると、コードがよりモジュール化され、再利用可能になり、保守が容易になり、より堅牢でスケーラブルなコードベースが得られます。

この記事がお役に立てば幸いです。ご質問やご提案がございましたら、お気軽にコメントください。

以上がReact でのデザインパターン [HOC、レンダープロップ、フック]の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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