React プロップス (Props)
プロップス(Props)は、React コンポーネントに渡される引数(Arguments)です。
HTML の属性(Attributes)と同じ形式でコンポーネントに渡されます。
なお、props は「Properties(プロパティ)」の略称です。
1. React プロップス (React Props)
React プロップスは、JavaScript の関数における引数や、HTML の属性のような役割を果たします。
コンポーネントにプロップスを送るには、HTML 属性と同じ構文を使用します。
1.1 プロップスの送信
以下のように、Car エレメントに brand 属性を追加します。
createRoot(document.getElementById('root')).render(
<Car brand="フォード" />
);1.2 プロップスの受信
コンポーネントは、引数を props オブジェクトとして受け取ります。
function Car(props) {
return (
<h2>私は {props.brand} です!</h2>
);
}このオブジェクトの名前は慣習的に props と呼ばれますが、任意の名前を付けることも可能です。
function Car(myobj) {
return (
<h2>私は {myobj.brand} です!</h2>
);
}2. 複数のプロパティを渡す
プロパティは、必要に応じていくつでも送ることができます。
すべての属性は、オブジェクトのプロパティとして Car コンポーネントに送られます。
2.1 複数プロパティの送信例
createRoot(document.getElementById('root')).render(
<Car brand="フォード" model="マスタング" color="赤" />
);2.2 受信側での利用
すべてのプロパティは props オブジェクトの中に格納されています。
function Car(props) {
return (
<h2>私は {props.color} の {props.brand} {props.model} です!</h2>
);
}3. 多様なデータ型
React のプロップスは、変数、数値、文字列、オブジェクト、配列など、あらゆるデータ型を渡すことができます。
文字列は引用符(" ")で囲んで送りますが、数値、変数、オブジェクトなどは波括弧 { } で囲む必要があります。
3.1 数値を渡す場合
数値として扱うには波括弧を使用します。
createRoot(document.getElementById('root')).render(
<Car year={1969} />
);3.2 変数(Variables)を渡す場合
let x = "フォード";
createRoot(document.getElementById('root')).render(
<Car brand={x} />
);3.3 オブジェクトや配列を渡す場合
let x = [1964, 1965, 1966];
let y = {name: "フォード", model: "マスタング"};
createRoot(document.getElementById('root')).render(
<Car years={x} carinfo={y} />
);4. オブジェクトのプロップス
コンポーネント内でもオブジェクトはオブジェクトとして扱われ、ドット記法(Dot notation)を使ってプロパティにアクセスできます。
function Car(props) {
return (
<>
<h2>私の {props.carinfo.name} {props.carinfo.model}!</h2>
<p>色は {props.carinfo.color} で、{props.carinfo.year} 年製です!</p>
</>
);
}
const carInfo = {
name: "フォード",
model: "マスタング",
color: "赤",
year: 1969
};
createRoot(document.getElementById('root')).render(
<Car carinfo={carInfo} />
);5. 配列のプロップス
配列のプロップスには、インデックス番号を使ってアクセスできます。
function Car(props) {
return (
<h2>私の車は {props.carinfo[0]} {props.carinfo[1]} です!</h2>
);
}
const carInfo = ["フォード", "マスタング"];
createRoot(document.getElementById('root')).render(
<Car carinfo={carInfo} />
);6. コンポーネント間でのデータ受け渡し
属性(Attributes)を利用することで、あるコンポーネントから別のコンポーネントへデータをパラメーターとして受け渡すことができます。
function Car(props) {
return (
<h2>私は {props.brand} です!</h2>
);
}
function Garage() {
return (
<>
<h1>私のガレージには誰が住んでいる?</h1>
<Car brand="フォード" />
</>
);
}
createRoot(document.getElementById('root')).render(
<Garage />
);注意: React プロップスは読み取り専用(Read-only)です!値を変更しようとするとエラーが発生します。コンポーネント側で受け取ったデータを直接書き換えてはいけません。