【ITニュース解説】Passing Data with Props: Building Parent-Child Components

2025年09月09日に「Dev.to」が公開したITニュース「Passing Data with Props: Building Parent-Child Components」について初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

ITニュース概要

Reactのpropsは、親コンポーネントから子コンポーネントへデータを渡す仕組みである。これにより、一つのコンポーネントを異なるデータで何度も再利用でき、動的な画面作成が可能になる。propsは子コンポーネント内では変更できない読み取り専用のデータだ。

ITニュース解説

ReactでWebアプリケーション開発を学ぶ際、最初に作るコンポーネントは「Hello, World!」のような決まった文字列を表示するだけの静的なものであることが多い。静的なコンポーネントは、表示内容がコードに直接書き込まれているため、それ自体を変更することはできない。しかし、実際のアプリケーション、例えばSNSの投稿一覧などでは、ユーザー名や投稿内容のように、状況に応じて異なる情報を表示する必要がある。投稿が表示されるたびに新しいコンポーネントを個別に作成する方法は、開発効率が悪く、コードの管理も非常に複雑になる。この課題を解決するためにReactが提供する基本的な機能が「props」である。

propsは「properties」の略称であり、コンポーネントに外部からデータを渡すための仕組みを指す。これはプログラミングにおける関数の「引数」とよく似た概念と考えることができる。関数が引数の値によって異なる計算結果を返すように、Reactのコンポーネントもpropsとしてデータを受け取ることで、その内容に応じた異なるUIを動的に表示することが可能になる。この仕組みによって、一つのコンポーネントを設計図のように使い回し、様々なデータを表示させることができるため、コンポーネントの再利用性が飛躍的に向上する。

propsにおけるデータの流れには明確なルールがある。データは、コンポーネントの親子関係において、必ず親コンポーネントから子コンポーネントへと一方向に渡される。データを渡す側が親、受け取る側が子となる。そして最も重要な制約として、propsは「読み取り専用(read-only)」であるというルールが存在する。つまり、子コンポーネントは親から受け取ったpropsの値を表示などに利用することはできるが、その値を直接変更することは許可されていない。この一方向のデータフローと読み取り専用という原則は、アプリケーション全体のデータの流れを予測しやすくし、意図しないデータの書き換えを防ぐことで、コードの信頼性と保守性を高める上で重要な役割を担っている。

propsを実際に使用するには、まずデータを受け取る子コンポーネントを定義する。この子コンポーネントは、関数の引数としてpropsという名前のオブジェクトを受け取るように記述する。コンポーネントの内部では、props.nameのように、オブジェクトのプロパティとして渡されたデータにアクセスする。次に、親コンポーネント側で、この子コンポーネントを呼び出す際にデータを渡す。これはHTMLタグの属性を指定するのと同じような構文で記述し、例えば<Welcome name="React" />と書くことで、nameというキーに"React"という値が設定されたオブジェクトが、Welcomeコンポーネントのpropsとして渡される。この方法を用いることで、<Welcome name="Taro" /><Welcome name="Hanako" />のように、同じコンポーネントを異なるデータで何度も再利用することが可能になる。

propsの利用にあたっては、初心者が陥りやすい間違いがいくつか存在する。第一に、読み取り専用であるpropsの値を子コンポーネント内で変更しようと試みることである。これはReactのルールに反しており、エラーや予期せぬ動作の原因となるため、絶対に行ってはならない。コンポーネントが自身の状態を管理し、ユーザーの操作などに応じて値を変更する必要がある場合は、propsとは異なる「state」という仕組みを用いる。第二に、数値や真偽値などのデータを渡す際の型の問題である。JSXにおいて<User age="25" />のように値をダブルクォーテーションで囲むと、その値は文字列として扱われる。数値の25として渡したい場合は<User age={25} />のように値を波括弧で囲む必要がある。特に、<User enabled="false" />と記述した場合、文字列の"false"はJavaScriptの評価では真(truthy)と判定されてしまうため、意図した通りに動作しない。真偽値を渡す際は必ず<User enabled={false} />のように記述しなければならない。最後に、propsの参照方法である。コンポーネント内でprops.nameprops.ageと繰り返し記述するのは冗長になりやすい。JavaScriptの「分割代入」という構文を使い、関数の引数部分を(props)から({ name, age })のように書き換えることで、コンポーネント内では直接nameageという変数名で値にアクセスでき、コードがより簡潔で可読性の高いものになる。

結論として、propsは静的なコンポーネントを、動的で再利用可能なUI部品へと進化させるための、Reactにおける基本的かつ極めて強力な機能である。親から子への一方向のデータフローと、propsは読み取り専用であるという二つの重要なルールを理解することは、複雑なReactアプリケーションを構築するための揺るぎない土台となる。この概念をマスターすることで、効率的で保守性の高いコンポーネント設計が可能になる。