【実務・中級編】 Propsのレスト・スプレッド構文 – React実践ガイド

こんにちは。君もそろそろ「単に画面を組み立てられる」だけのジュニアを卒業し、コンポーネント設計の美しさと現実のトレードオフに頭を悩ませる中級のフェーズに入った頃だな。

今回は、React開発において避けて通れない、しかし雑に扱いがちな「Propsのレスト・スプレッド構文(`{…props}`)」について話をしよう。

「親から受け取ったPropsを、そのまま子やHTML要素にスプレッドして流すだけだろ? 何も難しくないよ」と思ったそこの君。ちょっと待ってほしい。その「なんとなく便利なパススルー」のせいで、将来的に型エラーの温床になったり、意図しないDOM属性がHTMLにリークしてコンソールが警告まみれになったり、パフォーマンスの最適化を阻害する「負債」を生んでいないだろうか?

今日は、シニアの視点から、この構文の裏側の仕組みから実務で絶対に外せないベストプラクティスまで、泥臭い知見を含めて徹底的に紐解いていこう。

—

1. そもそも `{…props}` の裏側で何が起きているのか?

JavaScript(ひいてはV8などのブラウザのJSエンジン)の視点から、スプレッド構文 `{…props}` が何をしているかをおさらいしておこう。

JSのオブジェクトにおけるスプレッド構文は、「新しいオブジェクトをシャローコピー(浅い複製)し、列挙可能なプロパティを展開する」という操作だ。

const baseProps = { id: ‘btn-1’, className: ‘primary’, onClick: handleClick };
const extendedProps = { …baseProps, disabled: true };

Reactのコンポーネントモデルにおいて、JSXは最終的に `React.createElement` という関数呼び出しにトランスパイルされる。親から渡されたPropsオブジェクトを `{…props}` でそのまま子コンポーネントやネイティブのHTML要素(`
);
};

このコードの優れたポイント

1. `ComponentPropsWithoutRef<'button'>` の活用: ネイティブの `

コメント

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