こんにちは!Reactの世界へようこそ。
フロントエンドの最前線でコードを書いていると、つい「どうやって複雑な機能を実装するか」に目が向きがちですが、実は「いかにコードを優しく、そして事故が起きないようにするか」という土台の部分こそが、長く愛されるアプリケーションを作る秘訣だったりします。
今日は、Reactのコンポーネントを設計する上で、誰もが一度は「これ、どう書くのが一番スマートなの?」と立ち止まる「デフォルトProps(初期値)」の設定についてお話ししますね。
—
コンポーネントは「気まぐれなお客さん」を想定しよう
Reactのコンポーネントは、言ってみれば「料理人」のようなものです。注文(Props)を受けて、それに応じた料理(画面)を出します。
でも、たまにこんなことが起きませんか?
「ボタンを表示して!」という注文は来たけれど、「ボタンの文字は何にする?色は?」という細かい情報が何も書かれていない……。
もし、料理人が「注文が足りないから作りません!」とフリーズしてしまったら、お店は大混乱ですよね。そこで必要なのが「何も指定がなかったら、とりあえず『OK』ボタンをグレーで出しておこう」というデフォルトのルールです。
昔のやり方と、今のスマートなやり方
Reactの歴史の中では、以前は `defaultProps` という専用の機能を使っていました。でも、今はもっとシンプル。JavaScriptの「デフォルト引数」という機能をそのまま使っちゃうのが、モダンで一番イケてる書き方なんです。
身近な例えで言うと、新しい炊飯器を買ったとき、「何も設定しなくても、とりあえず『白米・普通炊き』にセットされている」ような状態ですね。
さっそくコードで見てみましょう
例えば、「お知らせバッジ」を作るコンポーネントを考えてみましょう。色は「青」、文字は「未読」をデフォルトにしておきます。
// お知らせバッジのコンポーネント
// 引数のところで直接デフォルト値を指定します
const NotificationBadge = ({ text = “未読”, color = “blue” }) => {
// スタイルオブジェクト(これもReactの基本!)
const style = {
backgroundColor: color,
color: “white”,
padding: “4px 8px”,
borderRadius: “4px”
};
return (
);
};
// 使う側(親コンポーネント)
export default function App() {
return (
{/ もちろん、上書きも自由自在! /}
);
}
この書き方の何がいいの?
1. とにかく読みやすい:関数の引数の場所で「もしなかったらこれね」と宣言しているので、コードを追いかける目が迷子になりません。
2. 型(Typescript)との相性が抜群:将来的にTypeScriptを導入したときも、この書き方なら自然に型定義と馴染んでくれます。
3. 無駄なコードが減る:昔の `defaultProps` を書くための長い記述が必要ないので、画面がスッキリします。
—
初学者がつまずきやすい「落とし穴」
ここで一つだけ、初心者の頃にやりがちな注意点をお伝えしますね。それは「オブジェクトの受け取り方」です。
もしPropsとして「設定の塊(オブジェクト)」を渡す場合、書き方に少しコツがいります。
// 悪い例:これだと設定が空だったときにエラーになる可能性がある
const UserCard = ({ config = { theme: “light” } }) => {
return
;
};
// 良い例:分解して受け取り、それぞれにデフォルト値を持たせる
const UserCard = ({ theme = “light”, isAdmin = false }) => {
return
;
};
このように、「受け取る場所でバラバラに分解(分割代入)して、それぞれに初期値を与える」のが、Reactの現場では最も安全で好まれる書き方です。これなら、「設定が一部だけ渡された」というケースにも柔軟に対応できます。
—
最後に:完璧を目指さなくて大丈夫
プロの現場でも、最初は「これ、どんな値が来るかな?」と迷うことはたくさんあります。でも、こうやって「もしもの時のデフォルト値」を優しく設定しておくだけで、バグは劇的に減りますし、何よりコードがとても温かいものになります。
「あれ、動かない?」と悩む時間も、実は成長の証です。まずはこの「デフォルト引数」の書き方をエディタに書いてみて、ブラウザで表示が切り替わるのを眺めてみてください。
「あ、ちゃんと動いた!」というその小さな感動こそが、エンジニアとしての第一歩です。また何か困ったことがあれば、いつでも相談してくださいね。応援しています!

コメント