export default { ... } は、Vueコンポーネントを他のファイルで使用できるようにエクスポートするための構文です。もしそのコンポーネントを他のファイルで使う予定がなければ、export defaultを省略することもできます。
例えば、Vueコンポーネントが単独で使われる場合、export defaultを使わなくても動作しますが、一般的にVueコンポーネントは別のファイルでインポートして使うことが多いため、export defaultは書いておく方が無難です。
export defaultを使わない場合:
もしコンポーネントが現在のファイル内でのみ使われ、他のファイルにインポートする予定がない場合、export defaultは省略できます。しかし、Vueではほとんどの場合、他のファイルでもそのコンポーネントを使うことになるため、export defaultを記述しておくのが一般的です。
例えば、コンポーネントが単独で使われる場合:
const MyComponent = {
data() {
return {
message: "Hello, World!"
};
},
methods: {
greet() {
alert(this.message);
}
}
};
export default MyComponent;
まとめ:
- 他のファイルでそのコンポーネントを使用する可能性がある場合は、
export defaultを書いておく方が無難です。 - 現在そのコンポーネントを単独で使うだけなら、省略しても問題ありませんが、
export defaultを使うことで他のファイルでインポートできるようになり、再利用性が高まります。
基本的には、コンポーネントの再利用性を高めるために、export defaultを使っておく方が望ましいです。
料理に例えると、
export defaultはレシピを「他の人に渡せる形」にする作業に似ています。
-
export default: これは、作った料理を「レシピカード」にして渡すようなものです。これを使うと、他の人(別のファイル)でもそのレシピ(コンポーネント)を使って料理(コンポーネント)を作ることができます。もしレシピを渡さなければ、その料理はその場でしか食べられません。 -
省略する場合: 料理を「その場でだけ食べる」ような感じです。他の人に渡さないで、その場だけで楽しむなら、レシピをわざわざ書かなくてもOK。でも、もし後でその料理を他の人に作ってもらいたい場合は、レシピを渡しておく必要があります。
つまり、**export default**は他の人が再利用できるように「レシピを渡す」という行為で、省略するということはそのレシピを渡さずに「その場でのみ食べる」という選択になります。
例
export defaultは、コンポーネントや関数、オブジェクトなどをエクスポートして、他のファイルで利用できるようにするために使います。以下にいくつかの例を挙げて、使い方を紹介します。
1. Vueコンポーネントのエクスポート
Vueコンポーネントを他のファイルでインポートして使用するためには、export defaultを使ってコンポーネントをエクスポートします。
// MyComponent.vue
<template>
<div>
<h1>{{ message }}</h1>
</div>
</template>
<script>
export default {
name: 'MyComponent',
data() {
return {
message: 'Hello from MyComponent!',
};
},
};
</script>
このようにコンポーネントをエクスポートすることで、別のファイルでインポートして使用できます。
// App.vue
<template>
<div>
<MyComponent />
</div>
</template>
<script>
import MyComponent from './MyComponent.vue';
export default {
components: {
MyComponent,
},
};
</script>
2. 単一の関数のエクスポート
単一の関数をエクスポートする場合にもexport defaultを使います。この方法でエクスポートされた関数は、他のファイルでインポートして使用できます。
// utils.js
export default function greet(name) {
return `Hello, ${name}!`;
}
この関数を他のファイルでインポートして使うことができます。
// App.vue
import greet from './utils.js';
export default {
mounted() {
console.log(greet('John')); // "Hello, John!"
},
};
3. オブジェクトのエクスポート
オブジェクトをエクスポートする場合も、export defaultを使って他のファイルでそのオブジェクトをインポートして使用します。
// config.js
export default {
apiUrl: 'https://api.example.com',
apiKey: '1234567890',
};
他のファイルでは、このオブジェクトをインポートしてアクセスできます。
// App.vue
import config from './config.js';
export default {
mounted() {
console.log(config.apiUrl); // "https://api.example.com"
console.log(config.apiKey); // "1234567890"
},
};
4. クラスのエクスポート
クラスをエクスポートして、他のファイルでインスタンスを作成する場合にもexport defaultを使います。
// Person.js
export default class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
return `Hello, my name is ${this.name} and I am ${this.age} years old.`;
}
}
このクラスを他のファイルでインポートして使います。
// App.vue
import Person from './Person.js';
export default {
mounted() {
const person = new Person('John', 30);
console.log(person.greet()); // "Hello, my name is John and I am 30 years old."
},
};
5. 設定ファイルやデータのエクスポート
設定情報やデータをエクスポートする場合にもexport defaultが使われます。例えば、JSON形式の設定ファイルやデータファイルをエクスポートすることができます。
// data.js
export default {
users: [
{ name: 'Alice', age: 28 },
{ name: 'Bob', age: 34 },
],
};
このデータを他のファイルでインポートして利用できます。
// App.vue
import data from './data.js';
export default {
mounted() {
console.log(data.users); // [{ name: 'Alice', age: 28 }, { name: 'Bob', age: 34 }]
},
};
まとめ:
export defaultは、コンポーネント、関数、オブジェクト、クラス、データなどをエクスポートして他のファイルでインポートできるようにするために使います。特にVueコンポーネントやユーティリティ関数など、プロジェクト内で再利用するためにはよく使う構文です。
他のファイルで使いたいものをexport defaultでエクスポートし、それをインポートすることで、コードの再利用やモジュール化がしやすくなります。
なぜ export default は1つだけなのか?
export defaultを使うと、そのファイルから 1つだけ を「デフォルト」としてエクスポートします。デフォルトエクスポートは、そのファイルの「主な」エクスポートとされるため、1つのファイルに複数のデフォルトエクスポートはできません。
複数のエクスポートが必要な場合
もし複数の値(関数、クラス、オブジェクトなど)をエクスポートしたい場合は、export default ではなく、通常の export を使います。
例 1: export default と通常の export を使う
// utils.js
export default function greet(name) {
return `Hello, ${name}!`;
}
export function farewell(name) {
return `Goodbye, ${name}!`;
}
このように、export default を使ってデフォルトエクスポートを1つだけ行い、さらに他の関数や値を通常の export でエクスポートすることができます。
インポート例:
// App.vue
import greet, { farewell } from './utils.js'; // `greet` はデフォルトインポート、`farewell` は名前付きインポート
export default {
mounted() {
console.log(greet('John')); // "Hello, John!"
console.log(farewell('John')); // "Goodbye, John!"
},
};
このように、1つのファイルに1つの export default と、複数の名前付きエクスポートを混ぜて使うことができます。
複数のデフォルトエクスポートができない理由
JavaScriptモジュールは、ファイルが1つの「主な」エクスポートを持つことを想定しているため、export default が複数存在すると、どれがそのモジュールの「主な」エクスポートなのかが不明確になります。このため、1つのファイルで1つの export default しか許可されていません。
まとめ
-
export defaultは1ファイルに1つだけです。 - 複数の値をエクスポートしたい場合は、通常の
exportを使います。 -
export defaultは「主なエクスポート」を指定するために使い、他のエクスポートは名前付きエクスポートで管理します。
export の場合、名前は 統一する必要があります。具体的には、export でエクスポートする際の名前と、インポート時に使う名前は 一致 させる必要があります。
通常の export でのエクスポートとインポート
例 1: 名前が一致する場合
// utils.js
export function greet(name) {
return `Hello, ${name}!`;
}
インポート時も同じ名前を使います:
// App.vue
import { greet } from './utils.js'; // `greet` はエクスポート時の名前と一致
export default {
mounted() {
console.log(greet('John')); // "Hello, John!"
},
};
この場合、greet 関数の名前はエクスポート時とインポート時で一致しています。greet という名前でエクスポートし、その名前でインポートする必要があります。
例 2: 名前を変更した場合(別名でインポート)
export でエクスポートした名前をインポート時に変更することはできますが、その場合はインポート時に as を使って別名を付ける必要があります。
// utils.js
export function greet(name) {
return `Hello, ${name}!`;
}
インポート時に名前を変更する場合:
// App.vue
import { greet as sayHello } from './utils.js'; // `greet` を `sayHello` としてインポート
export default {
mounted() {
console.log(sayHello('John')); // "Hello, John!"
},
};
このように、greet としてエクスポートした関数を、sayHello という名前でインポートしています。as を使って名前を変更できます。
名前を一致させる必要がある場面
-
エクスポート時の名前とインポート時の名前は一致させる必要があります。ただし、インポート時に
asを使って別名を付けることはできます。 -
名前付きエクスポートの場合、エクスポートする名前とインポートする名前は基本的に一致しなければなりません。
asを使えば名前の変更が可能です。
まとめ
-
exportでエクスポートした関数や変数の名前は、インポート時に一致させる必要があります。 - インポート時に
asを使えば、名前を変更してインポートすることができます。
名前を一致させることで、コードの可読性やメンテナンス性が向上します。
import { aaa } from "@test/test"; と import aaa from "@test/test"; の違いについて、それぞれの構文の意味を説明します。
1. import { aaa } from "@test/test";
この形式は、名前付きインポートです。@test/testモジュールから、名前が aaa のエクスポートをインポートしています。ここで {} 内の aaa は、モジュールでエクスポートされた具体的な名前です。
使用例:
// @test/test.js
export const aaa = 'Hello';
// 別のファイルでインポート
import { aaa } from "@test/test"; // aaa という名前のエクスポートをインポート
console.log(aaa); // 'Hello'
この場合、@test/test.js モジュール内で名前付きエクスポートされた aaa をインポートしています。
2. import aaa from "@test/test";
この形式は、デフォルトインポートです。@test/testモジュールからデフォルトエクスポートされたものを、aaa という名前でインポートしています。
使用例:
// @test/test.js
export default 'Hello';
// 別のファイルでインポート
import aaa from "@test/test"; // デフォルトエクスポートを aaa としてインポート
console.log(aaa); // 'Hello'
この場合、@test/test.js モジュールで export default を使ってエクスポートされた値を aaa という名前でインポートしています。
{} の意味
-
名前付きインポート (
import { aaa } from "@test/test";) では、{}はモジュール内でエクスポートされている名前を指定します。複数の名前付きエクスポートをインポートする場合も{}内でカンマ区切りで指定します。
例:
// @test/test.js
export const aaa = 'Hello';
export const bbb = 'World';
// 別のファイルでインポート
import { aaa, bbb } from "@test/test"; // aaa と bbb をインポート
console.log(aaa, bbb); // 'Hello' 'World'
-
デフォルトインポート (
import aaa from "@test/test";) では、{}は使用せず、デフォルトエクスポートされた値を指定します。
まとめ
-
{}は 名前付きエクスポート をインポートするために使用され、モジュールから特定の名前を指定してインポートします。 -
デフォルトインポート は
{}を使用せず、モジュールのデフォルトでエクスポートされた値をインポートします。