4
1

More than 1 year has passed since last update.

Reactで柔軟なコンポーネント設計!Compound Componentsパターンをマスターしよう

Posted at

Reactで柔軟なコンポーネント設計!Compound Componentsパターンをマスターしよう

目次

はじめに

Reactでは、コンポーネント設計が非常に重要です。今回紹介するCompound Componentsパターンは、コンポーネント間の関係を明確にし、再利用性を高めるための強力な手法です。

Compound Componentsパターンとは

Compound Componentsパターンは、親子コンポーネント間で柔軟に制御を行う設計パターンです。子コンポーネントは親コンポーネントからのプロパティを受け取り、個別に機能します。

Compound Componentsを使った例

Tabs.js

import React, { useState, createContext, useContext } from 'react';

const TabContext = createContext(); // コンテキストを作成

export const Tabs = ({ children }) => {
  const [activeTab, setActiveTab] = useState(0); // アクティブなタブの状態

  return (
    <TabContext.Provider value={{ activeTab, setActiveTab }}>
      <div>{children}</div> // 子コンポーネントをレンダリング
    </TabContext.Provider>
  );
};

export const Tab = ({ title, children }) => {
  const { activeTab, setActiveTab } = useContext(TabContext); // 親コンポーネントからの状態を取得
  const isActive = activeTab === title; // アクティブなタブか判定

  return (
    <div>
      <button onClick={() => setActiveTab(title)}>{title}</button>
      {isActive && <div>{children}</div>} // アクティブな場合のみコンテンツを表示
    </div>
  );
};

この例では、Tabsコンポーネントが親で、Tabコンポーネントが子です。親は現在のアクティブなタブを状態として保持し、子にコンテキストを通じて渡します。子コンポーネントはアクティブなタブかどうかを判定し、内容を表示します。

Compound Componentsを使わない例

Tabs.js

import React, { useState } from 'react';

export const Tabs = ({ titles, children }) => {
  const [activeTab, setActiveTab] = useState(0); // アクティブなタブの状態

  return (
    <div>
      {titles.map((title, index) => (
        <button onClick={() => setActiveTab(index)} key={index}>
          {title}
        </button>
      ))}
      {children[activeTab]} // アクティブなタブのコンテンツを表示
    </div>
  );
};

この設計では、タブのタイトルと内容が分離されており、Tabsコンポーネントが全てのロジックを制御します。子コンポーネントは単に表示されるだけで、独立した存在ではありません。

対比とメリット

  • 柔軟性: Compound Componentsを使用すると、より柔軟な設計が可能。
  • 再利用性: 各子コンポーネントが独立しているため、再利用しやすい。
  • 可読性: コンポーネントの関係が明確で、コードの可読性が向上。
  • メンテナンス: メンテナンスが容易。

まとめ

Compound Componentsパターンは、Reactのコンポーネント設計を向上させる素晴らしい手法です。この記事を通じて、この強力なパターンをマスターし、より洗練されたReactアプリケーションの開発を進めてください!

いいねやシェアは、今後の記事作成の励みになります。感想や質問があれば、コメント欄にお気軽にどうぞ!

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1