v19.2Latest

コンポーネントのインポートとエクスポート

コンポーネントの魔法はその再利用性にあります。他のコンポーネントで構成されるコンポーネントを作成できます。しかし、コンポーネントをどんどんネストしていくと、それらを別々のファイルに分割し始めることが理にかなっていることがよくあります。これにより、ファイルを簡単にスキャンできる状態に保ち、コンポーネントをより多くの場所で再利用できます。

学習内容
  • ルートコンポーネントファイルとは何か
  • コンポーネントをインポートおよびエクスポートする方法
  • デフォルトおよび名前付きインポート/エクスポートを使用するタイミング
  • 1つのファイルから複数のコンポーネントをインポートおよびエクスポートする方法
  • コンポーネントを複数のファイルに分割する方法

ルートコンポーネントファイル

最初のコンポーネントでは、Profileコンポーネントと、それをレンダリングするGalleryコンポーネントを作成しました:

これらは現在、この例ではルートコンポーネントファイルApp.jsという名前)にあります。ただし、設定によっては、ルートコンポーネントが別のファイルにある場合もあります。Next.jsのようなファイルベースのルーティングを使用するフレームワークでは、ページごとにルートコンポーネントが異なります。

コンポーネントのエクスポートとインポート

将来、ランディング画面を変更して科学書のリストを配置したい場合、またはすべてのプロファイルを別の場所に配置したい場合はどうすればよいでしょうか?GalleryProfileをルートコンポーネントファイルから移動することは理にかなっています。これにより、それらはよりモジュール化され、他のファイルで再利用可能になります。コンポーネントは3つのステップで移動できます:

  1. 作成:コンポーネントを配置する新しいJSファイルを作成します。
  2. エクスポート:そのファイルから関数コンポーネントをエクスポートします(デフォルトまたは名前付きエクスポートを使用)。
  3. インポート:コンポーネントを使用するファイルでインポートします(デフォルトまたは名前付きエクスポートをインポートするための対応する手法を使用)。

ここでは、ProfileGalleryの両方がApp.jsから、Gallery.jsという新しいファイルに移動されました。これで、App.jsを変更してGalleryGallery.jsからインポートできます:

この例が現在2つのコンポーネントファイルに分割されていることに注目してください:

  1. Gallery.js:
    • 同じファイル内でのみ使用され、エクスポートされないProfileコンポーネントを定義します。
    • コンポーネントをGalleryとしてデフォルトエクスポートします。
  2. App.js:
    • GalleryとしてデフォルトインポートGallery.jsからインポートします。
    • ルートのAppコンポーネントをデフォルトエクスポートします。
注記

以下のように、ファイル拡張子.jsを省略したファイルに出会うことがあります:

どちらもReactでは動作しますが、前者の'./Gallery.js'または'./Gallery'は、ネイティブESモジュールの動作により近いものです。

Deep Dive
デフォルトエクスポートと名前付きエクスポート

同じファイルから複数のコンポーネントをエクスポートおよびインポートする

ギャラリーではなく、単一のProfileだけを表示したい場合はどうすればよいでしょうか?Profileコンポーネントもエクスポートすることができます。しかし、Gallery.jsにはすでにデフォルトエクスポートがあり、2つのデフォルトエクスポートを持つことはできません。デフォルトエクスポートを持つ新しいファイルを作成するか、名前付きエクスポートを追加することができます。Profileファイルはデフォルトエクスポートを1つしか持てませんが、名前付きエクスポートは多数持つことができます!

注記

デフォルトエクスポートと名前付きエクスポートの間の潜在的な混乱を減らすため、一部のチームは1つのスタイル(デフォルトまたは名前付き)にのみ固執するか、単一のファイルでそれらを混在させないことを選択します。あなたにとって最適な方法を行ってください!

まず、エクスポートProfileGallery.jsから名前付きエクスポート(defaultキーワードなし)を使用して行います:

次に、名前付きインポート(中括弧を使用)でProfileGallery.jsからApp.jsにインポートします:

最後に、レンダリング<Profile />Appコンポーネントから行います:

これでGallery.jsには2つのエクスポートがあります:デフォルトのGalleryエクスポートと、名前付きのProfileエクスポートです。App.jsは両方をインポートしています。この例で<Profile /><Gallery />に編集して戻してみてください:

これで、デフォルトエクスポートと名前付きエクスポートを組み合わせて使用しています:

  • Gallery.js
    • コンポーネントProfile名前付きエクスポートProfileとしてエクスポートします。
    • コンポーネントGalleryデフォルトエクスポートとしてエクスポートします。
  • App.js
    • コンポーネントProfile名前付きインポートProfileとしてGallery.jsからインポートします。
    • コンポーネントGalleryデフォルトインポートとしてGallery.jsからインポートします。
    • ルートコンポーネントAppデフォルトエクスポートとしてエクスポートします。

まとめ

このページでは以下のことを学びました:

  • ルートコンポーネントファイルとは何か
  • コンポーネントをインポートおよびエクスポートする方法
  • デフォルトおよび名前付きのインポートとエクスポートをいつ、どのように使用するか
  • 同じファイルから複数のコンポーネントをエクスポートする方法

いくつかのチャレンジを試してみましょう

Challenge 1 of 1:コンポーネントをさらに分割する #

現在、Gallery.jsProfileGalleryの両方をエクスポートしており、少し混乱しています。

Profileコンポーネントを独自のProfile.jsに移動し、その後、Appコンポーネントを変更して<Profile /><Gallery />を順番にレンダリングするようにしてください。

Profileにはデフォルトエクスポートまたは名前付きエクスポートのどちらを使用しても構いませんが、App.jsGallery.jsの両方で対応するインポート構文を使用していることを確認してください! 詳細で説明した表を参照できます:

一つのエクスポート方法で動作させたら、もう一方の方法でも動作するようにしてください。