30
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

React 18で関数コンポーネントReact.FCからchildrenが消えた

Last updated at Posted at 2022-05-24

誰に向けて?

「プロパティ 'children' は型 '{}' に存在しません」と言われて焦っている、React, TypeScript初学者向け。

関数コンポーネントにてchildrenを明示しないとエラーになる

気がついたらReactがバージョン18になっていました。
(2022年3月29日npmに公開らしい)

18、、ついに成人したのですかね?:thinking:(年齢ではない)

そして、関数コンポーネントでは以下のようなエラーが出るように。

// エラー:「プロパティ 'children' は型 '{}' に存在しません。」と怒られる
export const Hoge: React.FC = ({ children }) => {
  return (
    <div>
      {children}
    </div>
  );
};

結論から言うとReact18から、以下のように明示的にchildrenを定義してやる必要があるそうです。

// childrenを明示してやる
// ?をつけるとオプショナル型となり、渡しても渡さなくてもいいように
type Props = {
  children?: React.ReactNode;
};

export const Hoge: React.FC<Props> = ({ children }) => {
  return (
    <div>
      {children}
    </div>
  );
};

なぜこのような仕様に?

もともとは、関数コンポーネント(Function Component)にReact:FCの型を当ててやると、暗示的にchildrenを渡せるようになっていました。

しかしこの仕様だと、childrenとして何か渡した方がいいのか判断できないとか、実はchildren使われてないので渡しても意味ないとか、不要なのにchildren含まれてて気持ち悪い、childrenとして渡せるものの種類が多いなどなど面倒があったのですね。

そこで、React.VFCというchildrenを持たない関数コンポーネントの型が生み出されました。

そしてついに、React 18でReact.FCにもchildrenが含まれなくなったのでした。

この一連の流れを、子供たち(children)の(型)安全を守ろう運動と言う、言わない。

childrenに関して、過去記事を参考にするときは注意ですね。

参考

https://stackoverflow.com/questions/71788254/react-18-typescript-children-fc
Thanks

30
8
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?