React 速習チュートリアル

React コンポーネント

コンポーネント(Components)は、HTML 要素を返す関数(Functions)のようなものです。

1. React コンポーネントとは

コンポーネントは、独立した再利用可能なコードの断片です。JavaScript の関数と同じ目的を果たしますが、独立して動作し、最終的に HTML を返すという特徴があります。

コンポーネントには「クラスコンポーネント(Class components)」と「関数コンポーネント(Function components)」の 2 種類がありますが、本チュートリアルでは関数コンポーネントに焦点を当てます。

古い React のコードベースではクラスコンポーネントが主に使われているのを目にするかもしれませんが、現在はクラスコンポーネントの代わりに関数コンポーネントと フック(Hooks) を組み合わせて使用することが推奨されています。

1.1 初めてのコンポーネント作成

React コンポーネントを作成する際、コンポーネント名は必ず大文字で始める必要があります。また、コンポーネントは HTML コードを返します。

例:Car という名前の関数コンポーネントを作成する

function Car() {
  return (
    <h2>こんにちは、私は車です!</h2>
  );
}

2. コンポーネントのレンダリング

これで、<h2> 要素を返す Car というコンポーネントが作成できました。
このコンポーネントをアプリケーションで使用するには、<Car /> のように記述して参照します。

例:root 要素に Car コンポーネントを表示する

createRoot(document.getElementById('root')).render(
  <Car />
);

3. プロップス (Props)

コンポーネントには、プロップス(Props)として引数を渡すことができます。Props は「Properties(プロパティ)」の略です。

引数は HTML の属性(Attributes)と同じ形式でコンポーネントに送られます。Props の詳細は、後の「React Props」の章で詳しく学習します。

例:属性を使用して Car コンポーネントに色を渡し、レンダリング関数内でそれを使用する

function Car(props) {
  return (
    <h2>私は {props.color} の車です!</h2>
  );
}

createRoot(document.getElementById('root')).render(
  <Car color="赤"/>
);

4. コンポーネントのネスト

コンポーネントの中で他のコンポーネントを参照(ネスト)させることができます。

例:Garage コンポーネントの中で Car コンポーネントを使用する

function Car() {
  return (
    <h2>私は車です!</h2>
  );
}

function Garage() {
  return (
    <>
      <h1>私のガレージには誰が住んでいる?</h1>
      <Car />
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Garage />
);

5. コンポーネントの再利用

1 つのコンポーネントを複数回レンダリングすることも可能です。

例:Garage コンポーネント内で Car コンポーネントを 2 回使用する

function Car() {
  return (
    <h2>私は車です!</h2>
  );
}

function Garage() {
  return (
    <>
      <h1>私のガレージには誰が住んでいる?</h1>
      <Car />
      <Car />
    </>
  );
}

上記の例はあまり実用的ではありませんが、引数(Props)を使って Car コンポーネントの内容を変化させれば、その利便性がより明確になります。

例:Car コンポーネントを使用して、2 つの異なるブランドを表示する

function Car(props) {
  return (
    <h2>私は {props.brand} です!</h2>
  );
}

function Garage() {
  return (
    <>
      <h1>私のガレージには誰が住んでいる?</h1>
      <Car brand="フォード" />
      <Car brand="BMW" />
    </>
  );
}

createRoot(document.getElementById('root')).render(
  <Garage />
);

6. ファイルの分割管理

React の真髄は「コードの再利用」にあります。コンポーネントを個別のファイルに分割することは、プロジェクトの管理において非常に優れた手法です。

これを行うには、src フォルダ内に拡張子 .jsx の新しいファイルを作成し、その中にコードを記述します。
※ファイル名も必ず大文字で始める必要があります。

例:新しいファイル Vehicle.jsx を作成する

// Vehicle.jsx
function Car() {
  return (
    <h2>こんにちは、私は車です!</h2>
  );
}

export default Car;

作成した Car コンポーネントを使用するには、アプリケーション内で Vehicle.jsx ファイルをインポート(Import)する必要があります。

例:Vehicle.jsx をインポートして使用する

// main.jsx
import { createRoot } from 'react-dom/client'
import Car from './Vehicle.jsx';

createRoot(document.getElementById('root')).render(
  <Car />
);

これで、別ファイルで定義した Car コンポーネントを、まるでその場で作成したかのように利用できるようになりました。