やあ、こんにちは!Reactの世界へようこそ。
フロントエンドの深淵を覗き込んでいる君なら、きっと一度は「コンポーネントをどう組み合わせたらいいんだろう?」と悩んだことがあるはずだよね。
Reactを学び始めると、最初は「ボタン」や「入力欄」といった小さな部品を作ることに夢中になる。でも、それらを組み合わせて「画面」を作ろうとしたとき、少しだけ壁にぶつかるんだ。
今日は、そんな君に「コンポーネント合成」という、Reactにおける最強の「組み立ての作法」を伝授するよ。難しいことは言わないから、肩の力を抜いて読んでみてね。
—
「入れ物」と「中身」を分けて考える
想像してみてほしい。君が美味しいお弁当を作るとする。
お弁当には「お弁当箱(入れ物)」と「おかず(中身)」があるよね。
もし、お弁当箱を作るたびに「中身もセットで作り直さなきゃいけない」としたらどうだろう? お弁当箱を変えるたびに、中身の唐揚げまで作り直すなんて、あまりに非効率だよね。
Reactの`children`(チルドレン)は、まさにこの「お弁当箱」と「中身」を切り離すための魔法の鍵なんだ。
`children`って何者?
`children`というのは、コンポーネントの中に「囲まれたもの」をそのまま受け取れる、Reactの特別な小箱のようなものさ。
例えば、こんな感じだ:
// 囲まれた中身をそのまま受け取る「箱」コンポーネント
const Box = ({ children }) => {
return (
{children}
);
};
これを使う側はこうなる:
const App = () => {
return (
こんにちは!
私は箱の中にいます。
);
};
見ての通り、`
—
なぜ「合成」がそんなに大事なのか
初心者のうちは、ついつい「全部入りのコンポーネント」を作りがちだ。「ヘッダーも中身もフッターも全部ひとつのファイルに書いちゃえ!」という感じにね。でも、それだと後で「ここはボタンの色を変えたい」とか「中身だけ差し替えたい」という要望が出た瞬間に、コードがスパゲッティみたいに絡まってしまう。
コンポーネント合成の哲学は、「部品は小さく、組み合わせは自由に」だ。
例えば、Webサイトの「カード型レイアウト」を想像してごらん。
カードの枠組みは共通だけど、中身はテキストだったり画像だったりするよね。`children`を使えば、その「枠組み」だけを一つ作っておけば、あとはどんな中身でも放り込むことができる。
型付けで「中身のルール」を守る(TypeScript編)
少しだけレベルアップの話をしよう。Reactでは、TypeScriptを使って「この箱には何を入れていいか」をルール化できる。
// propsの型定義
type BoxProps = {
children: React.ReactNode; // Reactで扱えるものなら何でもOKという意味
};
const Box = ({ children }: BoxProps) => {
return
;
};
`React.ReactNode`というのは、「Reactで描画できるものなら何でもいいよ」という魔法の杖だ。これをつけておけば、君の書いたコードは一段とプロフェッショナルなものになるよ。
—
最初は「囲む」ことから始めよう
「設計」なんて難しく考えなくていい。まずは、君が書いているコードの中で「あ、これ毎回同じ枠組みを使ってるな」という場所に気づくところからスタートしよう。
1. よく使う「枠(レイアウト)」を見つける。
2. その枠の中に`{children}`を置いてみる。
3. あとは、使いたい場所で `<枠>中身枠>` と書いてみる。
たったこれだけで、君のReactライフは驚くほど快適になるはずだ。
もし途中で「あれ、うまく表示されないな?」なんてことがあっても大丈夫。それは君が成長している証拠だよ。エラーメッセージは敵じゃなくて、Reactが教えてくれるヒントだ。ゆっくり、一つずつ紐解いていけば必ず動くようになるからね。
さあ、次はどんな「お弁当箱」を作ってみる?
君のコードに、少しだけ魔法をかけてみてほしい。応援しているよ!

コメント