【入門編】 Polymorphic Componentsの型定義 – React実践ガイド

こんにちは!Reactの学習、毎日お疲れ様です。
「よし、コンポーネントを綺麗にパーツ分けできるようになってきたぞ!」と楽しくなってきた頃に、ふとこんな壁にぶつかったことはありませんか?

「ボタンコンポーネントを作ったはいいけれど、ある時は `

({/ リンクとして使いたいとき /}

「なんだ、 `as` 属性をつければいいだけじゃん!」と思いますよね。
はい、JavaScript(またはプレーンなReact)の動的なレンダリングだけなら、実はそれほど難しくありません。問題は、「TypeScriptの型チェックを完璧に効かせること」なのです。

—

つまずきポイント:`as=”a”` なのに `href` が補完されない絶望

ここに、次のような「普通のボタンコンポーネント」の型定義があるとします。

type ButtonProps = {
as?: ‘button’ | ‘a’;
children: React.ReactNode;
};

これだと、何が困るでしょうか?
もしユーザーが `

{/ パターン2: リンクとして使う /}

);
}

ここで感動してほしいポイントがあります!
パターン2で `as=”a”` と指定した瞬間、TypeScriptのエディタはこんな風にあなたをサポートしてくれます。

  • `href` 属性を書くと、しっかり補完が効いて気持ちよく入力できる。
  • 万が一、`as=”button”` なのに `href` を書こうものなら、エディタが「おいおい、ボタンに `href` はおかしいぞ!」と赤く波線を出して教えてくれる。

これぞ、私たちが型定義をがんばる最大の理由です。「うっかりミスを、公開する前にエディタが全速力で防いでくれる」という安心感。最高ですね。

—

チーフアーキテクトからの優しいアドバイス

ポリモーフィックなコンポーネントは、一度書き方を覚えてしまえば、デザインシステムやUIライブラリ(Chakra UIやMUIなど)の裏側を覗いているようなワクワク感を味わえます。

ただ、初心者の方や、チームメンバーのスキルセットによっては、少しコードが複雑に感じられて「読むのがつらい……」となってしまうことも事実です。

だからこそ、プロジェクトの初期段階で無理にすべてをポリモーフィックにする必要はありません。
「ここは絶対にあらゆるタグに変身できなきゃ困る!」という共通のボタンやテキストコンポーネントに出会ったとき、今日紹介したコードをそっとお守り代わりに思い出してください。

もしコード書いていて「うわ、型エラーが消えないよ……!」と泣きそうになったら、深呼吸して一つずつプロパティを見直していきましょう。あなたは一人じゃありません、焦らずゆっくり進めていきましょうね。

それでは、快適なReactライフを!

コメント

タイトルとURLをコピーしました