コンポーネントのインポートとエクスポート
コンポーネントの魔法はその再利用性にあります。他のコンポーネントで構成されるコンポーネントを作成できます。しかし、コンポーネントをどんどんネストしていくと、それらを別々のファイルに分割し始めることが理にかなっていることがよくあります。これにより、ファイルを簡単にスキャンできる状態に保ち、コンポーネントをより多くの場所で再利用できます。
学習内容
- ルートコンポーネントファイルとは何か
- コンポーネントをインポートおよびエクスポートする方法
- デフォルトおよび名前付きインポート/エクスポートを使用するタイミング
- 1つのファイルから複数のコンポーネントをインポートおよびエクスポートする方法
- コンポーネントを複数のファイルに分割する方法
ルートコンポーネントファイル
最初のコンポーネントでは、Profileコンポーネントと、それをレンダリングするGalleryコンポーネントを作成しました:
これらは現在、この例ではルートコンポーネントファイル(App.jsという名前)にあります。ただし、設定によっては、ルートコンポーネントが別のファイルにある場合もあります。Next.jsのようなファイルベースのルーティングを使用するフレームワークでは、ページごとにルートコンポーネントが異なります。
コンポーネントのエクスポートとインポート
将来、ランディング画面を変更して科学書のリストを配置したい場合、またはすべてのプロファイルを別の場所に配置したい場合はどうすればよいでしょうか?GalleryとProfileをルートコンポーネントファイルから移動することは理にかなっています。これにより、それらはよりモジュール化され、他のファイルで再利用可能になります。コンポーネントは3つのステップで移動できます:
- 作成:コンポーネントを配置する新しいJSファイルを作成します。
- エクスポート:そのファイルから関数コンポーネントをエクスポートします(デフォルトまたは名前付きエクスポートを使用)。
- インポート:コンポーネントを使用するファイルでインポートします(デフォルトまたは名前付きエクスポートをインポートするための対応する手法を使用)。
ここでは、ProfileとGalleryの両方がApp.jsから、Gallery.jsという新しいファイルに移動されました。これで、App.jsを変更してGalleryをGallery.jsからインポートできます:
この例が現在2つのコンポーネントファイルに分割されていることに注目してください:
Gallery.js:- 同じファイル内でのみ使用され、エクスポートされない
Profileコンポーネントを定義します。 - コンポーネントを
Galleryとしてデフォルトエクスポートします。
- 同じファイル内でのみ使用され、エクスポートされない
App.js:- を
GalleryとしてデフォルトインポートでGallery.jsからインポートします。 - ルートの
Appコンポーネントをデフォルトエクスポートします。
- を
注記
以下のように、ファイル拡張子.jsを省略したファイルに出会うことがあります:
どちらもReactでは動作しますが、前者の'./Gallery.js'または'./Gallery'は、ネイティブESモジュールの動作により近いものです。
同じファイルから複数のコンポーネントをエクスポートおよびインポートする
ギャラリーではなく、単一のProfileだけを表示したい場合はどうすればよいでしょうか?Profileコンポーネントもエクスポートすることができます。しかし、Gallery.jsにはすでにデフォルトエクスポートがあり、2つのデフォルトエクスポートを持つことはできません。デフォルトエクスポートを持つ新しいファイルを作成するか、名前付きエクスポートを追加することができます。Profileのファイルはデフォルトエクスポートを1つしか持てませんが、名前付きエクスポートは多数持つことができます!
注記
デフォルトエクスポートと名前付きエクスポートの間の潜在的な混乱を減らすため、一部のチームは1つのスタイル(デフォルトまたは名前付き)にのみ固執するか、単一のファイルでそれらを混在させないことを選択します。あなたにとって最適な方法を行ってください!
まず、エクスポートProfileをGallery.jsから名前付きエクスポート(defaultキーワードなし)を使用して行います:
次に、名前付きインポート(中括弧を使用)でProfileをGallery.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.jsはProfileとGalleryの両方をエクスポートしており、少し混乱しています。
Profileコンポーネントを独自のProfile.jsに移動し、その後、Appコンポーネントを変更して<Profile />と<Gallery />を順番にレンダリングするようにしてください。
Profileにはデフォルトエクスポートまたは名前付きエクスポートのどちらを使用しても構いませんが、App.jsとGallery.jsの両方で対応するインポート構文を使用していることを確認してください! 詳細で説明した表を参照できます:
一つのエクスポート方法で動作させたら、もう一方の方法でも動作するようにしてください。
