はじめに
Reactにおいて、props(「プロパティ」の略)はコンポーネント間でデータを渡すための基本的な概念です。これを使うことで、動的で再利用可能なコンポーネントを作成できます。propsは関数に渡す引数のようなものだと考えてください。親コンポーネントが子コンポーネントの設定を行うために使用します。propsは読み取り専用であり、子コンポーネントが受け取ったpropsを直接変更してはいけません。
この実験では、以下の内容を学びます。
- 親コンポーネントから子コンポーネントへのpropsの定義と受け渡し
- 子コンポーネント内でのpropsへのアクセスと利用
- コードを簡潔にするための分割代入(destructuring)の使用
- propsのデフォルト値の設定
それでは始めましょう!
関数コンポーネントでのpropsパラメータの定義
このステップでは、新しい子コンポーネントを作成し、propsを受け取れるように準備します。Reactの関数コンポーネントは、渡されたすべてのpropsを含むオブジェクトを単一の引数として受け取ることができます。慣習として、このオブジェクトは props と名付けられます。
まず、プロジェクトディレクトリに移動します。セットアップスクリプトによって、すでに my-app というプロジェクトが作成されています。
cd ~/project/my-app
次に、プロジェクトの依存関係をインストールします。
npm install
次に、新しいコンポーネントファイルを作成します。左側のファイルエクスプローラーで src フォルダーに移動し、その中に Greeting.jsx という名前の新しいファイルを作成します。
作成した src/Greeting.jsx ファイルに以下のコードを追加します。これは、props パラメータを受け取るシンプルな関数コンポーネントを定義するものです。
function Greeting(props) {
return <h2>Hello, World!</h2>;
}
export default Greeting;
次に、この新しいコンポーネントをメインの App コンポーネントでインポートして使用する必要があります。src/App.jsx ファイルを開き、以下のように変更します。
import Greeting from "./Greeting.jsx";
function App() {
return (
<>
<h1>Welcome to My App</h1>
<Greeting />
</>
);
}
export default App;
それでは、開発サーバーを起動してアプリケーションを確認しましょう。
npm run dev -- --host 0.0.0.0 --port 8080
コマンド実行後、インターフェース左上の Web 8080 タブに切り替えてください。「Welcome to My App」と「Hello, World!」が表示されているはずです。
親からname="John"のようにprop値を渡す
このステップでは、親コンポーネント (App) から子コンポーネント (Greeting) にデータを渡す方法を学びます。これはJSXの属性のような構文を使用して行います。
Greeting コンポーネントに名前を渡し、パーソナライズされたメッセージを表示できるようにしましょう。
src/App.jsx ファイルを開きます。<Greeting /> の行を修正し、name というpropに "John" という値を渡すようにします。
import Greeting from "./Greeting.jsx";
function App() {
return (
<>
<h1>Welcome to My App</h1>
<Greeting name="John" />
</>
);
}
export default App;
ここで、name="John" がpropです。name がpropのキーで、"John" がその値です。波括弧 {} で囲むことで、任意のJavaScript式をpropの値として渡すことができます。文字列の場合は、引用符だけで十分です。
ファイルを保存すると、開発サーバーが自動的にリロードされます。Web 8080 タブを確認しても、出力はまだ変わっていません。これはpropを渡しただけで、Greeting コンポーネント側でまだそれを使用していないためです。次のステップで修正します。
props.nameを使って子コンポーネントでpropにアクセスする
Greeting コンポーネントが name propを受け取れるようになったので、それを使ってみましょう。子コンポーネント内の props オブジェクトには、親から渡されたすべてのプロパティが含まれています。props.propertyName のようにドット記法を使用してアクセスできます。
src/Greeting.jsx ファイルを開きます。props.name にアクセスしてパーソナライズされた挨拶を表示するように修正します。波括弧 {} を使用して、JavaScript式をJSX内に直接埋め込みます。
src/Greeting.jsx を以下のコードに更新してください。
function Greeting(props) {
return <h2>Hello, {props.name}!</h2>;
}
export default Greeting;
ファイルを保存します。Web 8080 タブに切り替えると、メッセージが「Hello, John!」に更新されているはずです。
これで、Reactにおける基本的なデータの流れ(propsを介した親から子への受け渡し)が確認できました。
関数パラメータでのpropsの分割代入
props.name や props.age などと繰り返し書くのは、特にコンポーネントが多くのpropsを受け取る場合に冗長になりがちです。よりクリーンで一般的なアプローチは、ES6の分割代入(destructuring)を使用して、関数のパラメータリスト内で直接 props オブジェクトからプロパティを取り出す方法です。
Greeting コンポーネントを分割代入を使うようにリファクタリングしましょう。
src/Greeting.jsx を開き、関数シグネチャを修正します。props を受け取る代わりに、分割代入を行って name を直接取得します。
ファイルを以下のように更新してください。
function Greeting({ name }) {
return <h2>Hello, {name}!</h2>;
}
export default Greeting;
(props) を ({ name }) に変更することで、関数に渡されたオブジェクトから name プロパティを抽出するようにJavaScriptに指示しています。これにより、props.name ではなく name を直接使用できるため、コンポーネントの本体がすっきりします。
ファイルを保存して Web 8080 タブを確認してください。出力は全く同じ(「Hello, John!」)ですが、コードはより簡潔で読みやすくなりました。
デフォルトパラメータによるデフォルトpropsの設定
親コンポーネントが必要なpropを渡さなかった場合はどうなるでしょうか?その値は undefined になり、エラーや予期しないUIの原因となる可能性があります。これを防ぐために、propsにデフォルト値を指定できます。
関数コンポーネントの場合、関数シグネチャ内でデフォルトパラメータを使用できます。
Greeting コンポーネントにデフォルトの名前を設定しましょう。src/Greeting.jsx を開き、関数パラメータを修正してデフォルト値を含めます。デフォルト名を "Guest" に設定します。
function Greeting({ name = "Guest" }) {
return <h2>Hello, {name}!</h2>;
}
export default Greeting;
それではテストしてみましょう。src/App.jsx を開き、別の <Greeting /> コンポーネントを追加しますが、今回は name propを渡さないようにします。
import Greeting from "./Greeting.jsx";
function App() {
return (
<>
<h1>Welcome to My App</h1>
<Greeting name="John" />
<Greeting />
</>
);
}
export default App;
両方のファイルを保存します。Web 8080 タブに移動すると、2つの挨拶が表示されているはずです。
- "Hello, John!" (propを受け取ったコンポーネント)
- "Hello, Guest!" (デフォルトのpropを使用したコンポーネント)
これは、コンポーネントの予測可能性を高め、エラーを防ぐための堅牢な方法です。
まとめ
実験の完了、おめでとうございます!Reactで再利用可能かつ動的なコンポーネントを作成するためのpropsの基礎を学びました。
この実験では以下のことを実践しました。
- propsを使用して親コンポーネントから子コンポーネントへデータを渡す。
propsオブジェクトを使用して子コンポーネント内でpropsにアクセスする。- 分割代入を使用して、よりクリーンで読みやすいコードを書く。
- デフォルトパラメータを使用してpropsのデフォルト値を設定し、コンポーネントを堅牢にする。
propsはReact開発の要であり、これらを習得することは複雑なアプリケーションを構築するための重要なステップです。Reactの学習を続ける中で、これらの概念を継続的に練習してください。



