目次
propsとは
親コンポーネントから子コンポーネントへ値を渡すための仕組み
とか
親コンポーネントから渡されたプロパティ
という役割らしいです。
あんまり深く考えないでください。
引数みたいなやつ
と感じ取ってください。
(考えるな。感じr)
propsはProperties
の略らしいです。
この方がイメージ湧きやすいでしょうか。
propsは値だけでなく、function(イベント)やstyleなども入れて渡せます。
ちなみに、読み取り専用らしいです。
あんまり意識したこと無かったですが、そうらしいです。
さっそくpropsを使ってみよう
Part3で、Child1~3コンポーネントを作って親コンポーネントで使用し表示したかと思いますが、
Child1~3は表示内容が少し違うだけで、機能は同じ
なので
Childコンポーネント一つに纏めて
表示内容を
propsで親コンポーネントから渡す
ということをしてみたいと思います。
1.ファイルchild2.tsx, child3.tsxを削除します。
2.child1.tsxをchild.tsxに変更します。
3.child.tsxのコンポーネント名を変更します。
4.child.tsxでpropsを受け取れるようにします。
export const Child: React.FC<{description: string}> = props => {
又は
type Props = {
description: string; // 説明
}
export const Child: React.FC<Props> = props => {
主にこんな書き方になると思います。
9.親コンポーネントを書き換えます。
import React from 'react'
import Child from './child';
export const Parent: React.FC = () => {
/** レンダー部分 */
return (
<>
<span>{'私は親です'}</span>
<ul>
<Child description={'長男'}/>
<Child description={'次男'}/>
<Child description={'三男'}/>
</ul>
</>
)
}
export default Parent;
完成!
動作確認してみてください。
propsに他の要素も追加し親から子へ渡してみよう
親コンポーネント
import React from 'react'
import Child from './child';
export const Parent: React.FC = () => {
/** レンダー部分 */
return (
<>
<span>{'私は親です'}</span>
<ul>
<Child description={'長男'} gender={'man'}/>
<Child description={'次男'} gender={'man'}/>
<Child description={'三男'} gender={'man'}/>
<Child description={'長女'} gender={'woman'}/>
</ul>
</>
)
}
export default Parent;
子コンポーネント
import React from 'react'
type Props = {
gender: 'man' | 'woman'; // 性別
description: string; // 説明
}
export const Child: React.FC<Props> = props => {
/** レンダー部分 */
return (
<li>{'私は' + props.description + 'です。性別は' + props.gender + 'です。'}</li>
)
}
export default Child;
propsをスプレッド構文を使用し簡単に書く
親コンポーネント
import React from 'react'
import {Child, Props} from './child';
export const Parent: React.FC = () => {
const params1: Props = {
description: '長男',
gender: 'man',
}
/** レンダー部分 */
return (
<>
<span>{'私は親です'}</span>
<ul>
<Child {...params1}/>
<Child description={'次男'} gender={'man'}/>
<Child description={'三男'} gender={'man'}/>
<Child description={'長女'} gender={'woman'}/>
</ul>
</>
)
}
export default Parent;
子コンポーネント
import React from 'react'
export type Props = {
gender: 'man' | 'woman'; // 性別
description: string; // 説明
}
export const Child: React.FC<Props> = props => {
/** レンダー部分 */
return (
<li>{'私は' + props.description + 'です。性別は' + props.gender + 'です。'}</li>
)
}
export default Child;
propsの数が増えた場合は便利かもしれませんね。
propsにイベントを追加し親から子へ渡してみよう
親コンポーネント
import React from 'react'
import {Child, Props} from './child';
export const Parent: React.FC = () => {
/** イベント */
const eventTest = () => {
console.log('イベント発生!')
}
const params1: Props = {
description: '長男',
gender: 'man',
evt: eventTest
}
/** レンダー部分 */
return (
<>
<span>{'私は親です'}</span>
<ul>
<Child {...params1}/>
<Child description={'次男'} gender={'man'} evt={eventTest}/>
<Child description={'三男'} gender={'man'} evt={eventTest}/>
<Child description={'長女'} gender={'woman'} evt={eventTest}/>
</ul>
</>
)
}
export default Parent;
子コンポーネント
import React from 'react'
export type Props = {
gender: 'man' | 'woman'; // 性別
description: string; // 説明
evt: () => void; // イベント
}
export const Child: React.FC<Props> = props => {
/** レンダー部分 */
return (
<li>
{'私は' + props.description + 'です。性別は' + props.gender + 'です。'}
<button onClick={props.evt}>ボタンです。</button>
</li>
)
}
export default Child;
細かい説明を省きました。逆に。
propsはReactで重要かと思いますので、よく理解してください。
また、イベントも引き渡しましたが、書き方による動作の違いがあるようですので
そのあたりも調べてみましょう。
- eventTest
- eventTest()
- () => eventTest()
イベントへの引数の渡し方なども。
以上