はじめに
コンポーネントの型としてReact.VFC
を書こうとすると下記のエラーがでた。
Namespace 'React' has no exported member 'VFC'.ts(2694)
React.FC
など種類があることは知っていたが、使い分けなど詳細を把握していなかったので、ここに記録します。
結論
今後、React.FC
が主流となっていくようなので、基本これを使っていれば良い。
React v18 からはReact.VFC
の方は非推奨になったので使わないようにする。
詳細
元々、React.FC
ではchildren
が最初から暗黙的に定義されており、props
の定義にchildren
を渡していない状態で、children
を使用してもエラーになりませんでした。
↓
これは良くない、ということでchildren
が含まれないReact.VFC
が一時的に用意された。
これで、children
が必要な場合は
interface Props {
name: string;
children: React.ReactNode;
}
とchildrenを明示的に定義することが必須となった。
↓
React v18 からはReact.FunctionComponent
(FC), React.Component
に暗黙的に含まれていた children
が除かれ、React.VFC
の方は非推奨になった。
おわりに
曖昧だった理解を深めるいい機会となった。
React.VFC
との関係以外に、React.FC と JSX.Element どちらを使うのか、というお話もあるようだが、自分の主観ではコンポーネントの型にはReact.FCが使われていることが多いように思う。