Reactのコンポーネント間で、データの受け渡しをする際に使用するpropsについて簡単に使ってみます。
サンプルコード
親コンポーネントをParent.jsx、子コンポーネントをChild.jsxとして試してみます。
まずは実装前のParent.jsxです。
import Child from './Child.jsx'
export default function Parent() {
return (
<div className="parent">
<p>Parent</p>
<Child />
</div>
)
}
Child.jsxの内容は以下の通りです。
export default function Child() {
return (
<div className="child">
<p>Child</p>
</div>
)
}
結果は、以下のような出力になります。
<div class="parent">
<p>Parent</p>
<div class="child">
<p>Child</p>
</div>
</div>
次にpropsを試してみます。
ParsonからChildにpersonとunitを渡すようにしてみます。
import Child from './Child.jsx'
export default function Parent() {
return (
<div className="parent">
<p>Parent</p>
<Child
person={{ name: 'Roko', age: 18 }}
unit={'Idios'}
/>
</div>
)
}
Childでは渡されたpersonとunitを表示するようにします。
export default function Child({ person, unit }) {
return (
<div className="child">
<p>Child</p>
<p>
{person?.name}({person?.age})<br/>
ユニット:{unit}
</p>
</div>
)
}
これでParsonからChildに渡された値の出力を確認できました。
<div class="parent">
<p>Parent</p>
<div class="child">
<p>Child</p>
<p>Roko(18)<br>ユニット:Idios</p>
</div>
</div>
propsにはデフォルト値を設定することもできます。
Childの方でunitに対してデフォルト値を設定してみます。
export default function Child({ person, unit = 'Idios' }) {
return (
<div className="child">
<p>Child</p>
<p>
{person?.name}({person?.age})<br/>
ユニット:{unit}
</p>
</div>
)
}
unitの値を渡さないで使ってみます。
import Child from './Child.jsx'
export default function Parent() {
return (
<div className="parent">
<p>Parent</p>
<Child
person={{ name: 'Roko', age: 18 }}
unit={'Idios'}
/>
<Child
person={{ name: 'Rika', age: 20.2 }}
/>
</div>
)
}
unitのデフォルト値での出力が確認できました。
<div class="parent">
<p>Parent</p>
<div class="child">
<p>Child</p>
<p>Roko(18)<br>ユニット:Idios</p>
</div>
<div class="child">
<p>Child</p>
<p>Rika(20.2)<br>ユニット:Idios</p>
</div>
</div>
注意点として、今回のような未設定の場合や値がundefinedの場合はデフォルト値が使われますが、nullや0の場合はデフォルト値は使われないようです。
最後にpropsの中のchildrenというプロパティを試してみます。
以下のようにChildを終了タグ付きにしてコンテンツをネストした際に、propsのchildrenプロパティで受け取ることができます。
import Child from './Child.jsx'
export default function Parent() {
return (
<div className="parent">
<p>Parent</p>
<Child
person={{ name: 'Roko', age: 18 }}
unit={'Idios'}
/>
<Child
person={{ name: 'Rika', age: 20.2 }}
/>
<Child
person={{ name: 'Ruri', age: 20 }}
unit={'みたらし団'}
>
<p>chirdrenで受け取る内容</p>
</Child>
</div>
)
}
Childにchildrenの表示を追加します。
export default function Child({ person, unit = 'Idios', children }) {
return (
<div className="child">
<p>Child</p>
<p>
{person?.name}({person?.age})<br/>
ユニット:{unit}
</p>
{children}
</div>
)
}
これでネストした部分の出力が確認できました。
<div class="parent">
<p>Parent</p>
<div class="child">
<p>Child</p>
<p>Roko(18)<br>ユニット:Idios</p>
</div>
<div class="child">
<p>Child</p>
<p>Rika(20.2)<br>ユニット:Idios</p>
</div>
<div class="child">
<p>Child</p>
<p>Ruri(20)<br>ユニット:みたらし団</p>
<p>chirdrenで受け取る内容</p>
</div>
</div>
今回はpタグを囲う形にしましたが、別のコンポーネントなどを囲って渡したりすることも可能です。
コメントが承認されるまで時間がかかります。