質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

意見交換

クローズ

3回答

911閲覧

React.FCの扱いについて

yusuraume

総合スコア34

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2024/07/02 06:19

編集2024/07/02 06:23

0

0

テーマ、知りたいこと

コンポーネント等の定義時にReact.FCは使うべきなのか?

背景、状況

当方、Webフロントエンジニアでここ数年はReact + Next.jsの環境で開発することが多いです。

漠然とコンポーネント定義時にReact.FCを型として利用しているがふと 「これでいいのか?」 と疑問に思い、色々調べてみると非推奨の文字が目立つなぁと感じました。

色々記事を見ているとJSX.Element でいいという一方で明示的にFCを指定するほうが良いという意見が見受けられそれも2〜3年前の記事だったりなので、直近の皆さんの所感を知りたいなぁと思い議論できればと思います。

よろしくお願いいたします。

一旦環境としては、React 18環境での扱いについて議論できれば良いなぁと思います。
(もちろん過去のいついつまではこっちが推奨みたいな議論は大歓迎なので環境を恐れず議論できればとは思います。)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答3

#1

honey32

総合スコア213

投稿2024/07/06 03:49

私は、React.FC に暗黙の children があった時代には React.VFC を使っていましたが、その問題が解決したので React.FC を使っています。


React.FC を使わない場合については、 返り値の型は JSX.Element ではなく ReactNode のほうが良い場合が多いと思います。

たぶん、<input> をラップした atom レベルのコンポーネントであれば、 JSX.Element が役に立ちそうですが、

そうでない場合は、ReactFragment や文字列、数値を返すことができますし、React Server Component を使うときには Promise を返すことも許されるので、それらも包摂する型 ReactNode にしたほうが良いと思います。

実際に、React.FC の返り値も、TypeScript 5.1 のころに ReactNode に変わっています。

https://github.com/DefinitelyTyped/DefinitelyTyped/pull/65135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

yusuraume

総合スコア34

投稿2024/07/09 08:38

編集2024/07/09 08:39

@honey32さん

React.FC を使わない場合については、 返り値の型は JSX.Element ではなく ReactNode のほうが良い場合が多いと思います。

あーなるほどReactNodeを直接指定ですか
質問なのですが、React.FCの時は以下のように実装するのですが、ReactNodeの場合ってpropsの型とかってどう当てるんでしょう?ジェネリクスで指定できないですよね?

tsx

1type Props = { 2 text: string 3} 4 5const Component: FC<Props> = (props) => { 6 return <p>{ props.text }</p> 7} 8 9export default Component

こういう実装になるのでしょうか?

tsx

1type Props = { 2 text: string 3} 4 5const Component: ReactNode = (props: Props) => { 6 return <p>{ props.text }</p> 7} 8 9export default Component 10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

honey32

総合スコア213

投稿2024/07/12 12:08

@3sanku9 さん

こういう実装になるのでしょうか?

はい。引数を単純に Props と明示するだけになります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問