Reactでは、親コンポーネントから子コンポーネントにデータを渡す仕組みとしてProps(プロパティ)を使用します。Propsを使いこなすことで、再利用可能で柔軟なコンポーネントを作成できます。ここでは、Propsの基本から実践的な使い方までを解説します。
基本的な使い方
Step 1Propsの基本:データを渡す
Propsは、HTMLの属性と同じような書き方で親コンポーネントから子コンポーネントにデータを渡します。
import Greeting from './Greeting';
function App() {
return (
<div>
<Greeting name="太郎" age={25} />
<Greeting name="花子" age={30} />
</div>
);
}
export default App;function Greeting({ name, age }) {
return (
<div>
<h2>こんにちは、{name}さん!</h2>
<p>年齢:{age}歳</p>
</div>
);
}
export default Greeting;文字列は"値"で、数値やオブジェクトなど文字列以外のデータは{値}で渡します。子コンポーネントでは、引数の分割代入({ name, age })で受け取るのが一般的です。
Step 2propsオブジェクトで受け取る方法
分割代入を使わず、propsオブジェクトとして一括で受け取ることもできます。
function Greeting(props) {
return (
<div>
<h2>こんにちは、{props.name}さん!</h2>
<p>年齢:{props.age}歳</p>
</div>
);
}
export default Greeting;props.プロパティ名でアクセスできますが、分割代入のほうがコードが簡潔になるため推奨されています。
Step 3さまざまなデータ型を渡す
Propsでは文字列や数値だけでなく、配列・オブジェクト・関数など、あらゆるJavaScriptの値を渡すことができます。
function App() {
const handleClick = () => alert('クリック!');
const colors = ['赤', '青', '緑'];
const user = { name: '太郎', role: '管理者' };
return (
<MyComponent
title="サンプル"
count={42}
isActive={true}
items={colors}
user={user}
onClick={handleClick}
/>
);
}function MyComponent({ title, count, isActive, items, user, onClick }) {
return (
<div>
<h2>{title}({count}件)</h2>
<p>ステータス:{isActive ? '有効' : '無効'}</p>
<p>ユーザー:{user.name}({user.role})</p>
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
<button onClick={onClick}>ボタン</button>
</div>
);
}
export default MyComponent;関数をPropsとして渡すことで、子コンポーネントから親コンポーネントの処理を実行できます。これはイベントハンドラを渡すときによく使われるパターンです。
Step 4デフォルト値の設定
Propsにデフォルト値を設定しておくと、値が渡されなかった場合にフォールバック値が使用されます。
function Button({ text = '送信', color = 'blue', size = 'medium' }) {
return (
<button style={{ backgroundColor: color, fontSize: size === 'large' ? '20px' : '14px' }}>
{text}
</button>
);
}
// 使用例
<Button /> {/* text="送信", color="blue" */}
<Button text="登録" color="green" /> {/* text="登録", color="green" */}分割代入の= デフォルト値構文を使うことで、Propsが未指定のときのデフォルト値を簡潔に定義できます。
Step 5childrenプロパティ
コンポーネントの開始タグと終了タグの間に記述した内容は、childrenという特別なPropsとして子コンポーネントに渡されます。
function Card({ title, children }) {
return (
<div style={{ border: '1px solid #ccc', padding: '16px', borderRadius: '8px' }}>
<h3>{title}</h3>
<div>{children}</div>
</div>
);
}
// 使用例
function App() {
return (
<Card title="お知らせ">
<p>新しい機能が追加されました。</p>
<p>詳細はこちらをご覧ください。</p>
</Card>
);
}childrenを使うことで、レイアウト用のラッパーコンポーネント(カード、モーダル、サイドバーなど)を柔軟に作成できます。
Propsは読み取り専用です。子コンポーネント内でPropsの値を直接変更することはできません。値を変更したい場合は、useStateを使って状態(state)として管理するか、親コンポーネントから更新用の関数をPropsとして渡してください。
まとめ
- Propsは親コンポーネントから子コンポーネントにデータを渡す仕組み
- 文字列は
"値"、それ以外は{値}で渡す - 子コンポーネントでは分割代入(
{ name, age })で受け取るのが一般的 - 配列・オブジェクト・関数など、あらゆるJavaScriptの値を渡せる
- デフォルト値を設定しておくと、Props未指定時にフォールバックされる
childrenを使うと柔軟なラッパーコンポーネントが作れる- Propsは読み取り専用で、子コンポーネント内では変更できない