私はこれらの2つの間に大きな違いがあるかどうかを判断しようとしexport default
ています。
import myItem from 'myItem';
そしてexport const
私ができることを使用して:
import { myItem } from 'myItem';
これ以外の違いやユースケースはあるのでしょうか。
const
です。
私はこれらの2つの間に大きな違いがあるかどうかを判断しようとしexport default
ています。
import myItem from 'myItem';
そしてexport const
私ができることを使用して:
import { myItem } from 'myItem';
これ以外の違いやユースケースはあるのでしょうか。
const
です。
回答:
これは、名前付きエクスポートとデフォルトエクスポートです。export const
const宣言をエクスポートする名前付きエクスポートです。
ここで重要なのは、const宣言を宣言するために使用されるexport
キーワードconst
です。export
クラスや関数の宣言など、他の宣言にも適用できます。
デフォルトのエクスポート(export default
)
ファイルごとに1つのデフォルトのエクスポートを設定できます。インポートするときは、次のように名前を指定してインポートする必要があります。
import MyDefaultExport from "./MyFileWithADefaultExport";
これには任意の名前を付けることができます。
名前付きエクスポート(export
)
名前付きエクスポートでは、ファイルごとに複数の名前付きエクスポートを作成できます。次に、中かっこで囲む必要のある特定のエクスポートをインポートします。
// ex. importing multiple exports:
import { MyClass, MyOtherClass } from "./MyClass";
// ex. giving a named import a different name by using "as":
import { MyClass2 as MyClass2Alias } from "./MyClass2";
// use MyClass, MyOtherClass, and MyClass2Alias here
または、同じステートメントで名前付きインポートとともにデフォルトを使用することもできます。
import MyDefaultExport, { MyClass, MyOtherClass} from "./MyClass";
名前空間のインポート
オブジェクトのファイルからすべてをインポートすることもできます。
import * as MyClasses from "./MyClass";
// use MyClasses.MyClass, MyClasses.MyOtherClass and MyClasses.default here
ノート
デフォルトのエクスポートは実際には名前付きの名前付きエクスポートであるdefault
ため、名前付きインポートでインポートできます。
import { default as MyDefaultExport } from "./MyFileWithADefaultExport";
export default
エクスポートされた「もの」をインポートするとき、エクスポートされたものを何でもインポートできるようにするimport
とき、それが「デフォルト」としてマークされているため、エクスポートされたときの名前に関係なく、それ自体で名前を選択することにより、構文に影響します。
私が気に入っている(そして使用している)便利なユースケースは、明示的に名前を付ける必要なしに匿名関数をエクスポートできることです。その関数をインポートする場合にのみ、名前を付ける必要があります。
default
次のとおりです。export function divide( x ){
return x / 2;
}
// only one 'default' function may be exported and the rest (above) must be named
export default function( x ){ // <---- declared as a default function
return x * x;
}
default
1つの名前を構成する:// The default function should be the first to import (and named whatever)
import square, {divide} from './module_1.js'; // I named the default "square"
console.log( square(2), divide(2) ); // 4, 1
とき{}
構文は関数(または変数)をインポートするために使用され、それは何がインポートされることを意味してすでにエクスポートしたときに1にしてインポートしなければならないので、名前の正確な同じ名前、または他の輸入は動作しません。
デフォルトの関数を最初にインポートする必要があります
import {divide}, square from './module_1.js
divide_1
でエクスポートされなかったmodule_1.js
ため、何もインポートされません
import {divide_1} from './module_1.js
square
は名前付きエクスポートのみを明示的に検索するようエンジンに指示するmodule_1.js
ため、ではエクスポートされませんでした。{}
import {square} from './module_1.js
import something from
代わりに名前を指定しない場合、それはデフォルトのエクスポートですimport { somethingNamed } from
。
マイナーな注意:デフォルトのエクスポートからインポートする場合、命名は完全に独立していることを考慮してください。これは実際にはリファクタリングに影響を与えます。
次のFoo
ようなクラスに対応するインポートがあるとします。
export default class Foo { }
//the name 'Foo' could be anything, since it's just an
//identifier for the default export
import Foo from './Foo'
Foo
クラスをリファクタリングしBar
、ファイルの名前を変更しても、ほとんどのIDEはインポートに影響しません。だからあなたはこれで終わるでしょう:
export default class Bar { }
//the name 'Foo' could be anything, since it's just an
//identifier for the default export.
import Foo from './Bar'
特にTypescriptでは、名前付きエクスポートと信頼性の高いリファクタリングに本当に感謝しています。違いは、default
キーワードと中括弧がないことだけです。また、この時点でタイプチェックが行われているため、インポート時にタイプミスを防ぐことができます。
export class Foo { }
//'Foo' needs to be the class name. The import will be refactored
//in case of a rename!
import { Foo } from './Foo'
import { Foo as Anything } from …
できimport Anything from …
ます。
as
そのソースコメントに本当にポイントではありません。反対票をいただきありがとうございます; p
ドキュメントから:
名前付きエクスポートは、いくつかの値をエクスポートするのに役立ちます。インポート中、同じ名前を使用して対応する値を参照できます。
デフォルトのエクスポートに関しては、モジュールごとに1つのデフォルトのエクスポートのみがあります。デフォルトのエクスポートには、関数、クラス、オブジェクトなどがあります。この値は最も簡単にインポートできるため、「メイン」のエクスポート値と見なされます。
ブラウザがes6を使用しないという問題がありました。
私はそれを修正しました:
<script type="module" src="index.js"></script>
タイプモジュールは、ブラウザにES6を使用するように指示します。
export const bla = [1,2,3];
import {bla} from './example.js';
その後、動作するはずです。
const
すると、識別子が読み取り専用になります。したがって、プリミティブ値の場合、それは不変であると考えることができます。値自体は不変ではないので、オブジェクトや配列などを変更することができることに注意してください。再割り当てするだけではありません。