投稿日:2021年1月22日
Reactのコンポーネントではpropsのデフォルト値を設定することができます。デフォルト値を使ってコードの汎用性・可読性を高めましょう。
Reactのコンポーネントは次の様にpropsを利用して値を受け取ることができます。
import React from "react";
class Article extends React.Component {
render() {
return <div>{this.props.title}</div>;
}
}
このpropsには以下のような注意点があります。
プロパティの渡し忘れはTypeScriptを利用することなどで防ぐことができますが、プロパティが大量に増えた場合はどうでしょう?
下のコードみたいなプロパティが大量のコードはできれば避けたいですね。
function App() {
return (
<div className="App">
<Article
title="スーパーマンの作り方"
author="Marsquai"
showContent={true}
articleType="News"
color="Red"
theme="chic"
/>
</div>
);
こうならないようにdefaultPropsでpropsのデフォルト値を設定してあげましょう。
デフォルト値の設定は簡単です。
クラスで定義したコンポーネントのdefaultPropsというプロパティにデフォルトで設定したいオブジェクトを渡すだけです。
import React from "react";
class Article extends React.Component {
render() {
return (
<div>
<div>{this.props.title}</div>
<div>{this.props.description}</div>
</div>
);
}
}
Article.defaultProps = { description: "説明はありません" };
クラスコンポーネントの場合静的プロパティとしてdefaultPropsを定義することができます。
defaultPropsはconstructorの呼び出しの前に参照されます。
必ず静的プロパティで定義することに注意してください。
class Article extends React.Component {
static defaultProps = { description: "説明はありません" };
render() {
return (
<div>
<div>{this.props.title}</div>
<div>{this.props.description}</div>
</div>
);
}
}
インテリセンスが効かないため勘違いしている人もいますが(...まあ自分のことなんだけど)、
functionコンポーネントでも問題なくdefaultPropsを設定できます。
import React from "react";
const Article = (props) =>
{
return (
<div>
<div>{props.title}</div>
<div>{props.description}</div>
</div>
);
}
Article.defaultProps = { description: "説明はありません" };