Import methods
import時の {} の有無は、相手(エクスポート側)の書き方で決まります。
{} なし
相手が export default している場合(1ファイル1機能に多い)
import Header from './Header';
const Header = () => { ... };
export default Header;
{} あり
相手が export している場合(1ファイルに複数機能ある場合に多い)
import { Header } from './components';
export const Header = () => { ... };
別れた背景
歴史的な背景と、設計思想(コードの書きやすさと安全性)の違いからこのように分かれています。
1. 思想の違い:主役と脇役
- export default({} なし)
- 思想: 「このファイルの主役はこれ!」という設計です。
- 理由: 1ファイル1機能のモジュール(コンポーネントなど)を、最も短いコードでシンプルに使えるようにするためです。
- export({} あり)
- 思想: 「このファイルには便利な道具が色々あるよ」という設計です。
- 理由: ユーティリティ関数集やアイコン集のように、必要なものだけを明示的に選んで取り出せるようにするためです。
2. 名前の自由度(柔軟性 vs 厳格性)
- export default は「値」を渡す
- 名前のないデータ(匿名関数やオブジェクト)もエクスポートできます。
- そのため、インポート側が「君の名前は今日から Header ね」と自由に命名できます。
- export は「変数名」を縛る
- 名前付きエクスポートは、コードのタイポ(打ち間違い)を防ぐために厳格です。
- {} を使うことで、エディタの自動補完(オートコンプリート)が効きやすくなり、大人数の開発でも名前がブレないメリットがあります。