"export const" vs. "export default" w ES6
Próbuję ustalić, czy są jakieś duże różnice między tymi dwoma, inne niż możliwość importowania za pomocą export default
po prostu robiąc:
import myItem from 'myItem';
I używając export const
mogę zrobić:
import { myItem } from 'myItem';
Czy są jakieś różnice i / lub przypadki użycia inne niż to?
6 answers
To nazwany eksport vs domyślny eksport. {[5] } jest nazwanym eksportem, który eksportuje deklarację const lub deklaracje.
Aby podkreślić: liczy się tu to, co export
słowo kluczowe jako const
służy do deklarowania deklaracji const lub deklaracji. export
może być również stosowany do innych deklaracji, takich jak deklaracje klas lub funkcji.
Domyślny Eksport (export default
)
Możesz mieć jeden domyślny eksport na plik. Przy imporcie musisz podaj nazwę i zaimportuj w ten sposób:
import MyDefaultExport from "./MyFileWithADefaultExport";
Możesz nadać mu dowolne imię.
Nazwa Eksportu (export
)
W przypadku eksportu nazwanego można mieć wiele nazwanych eksportów na plik. Następnie zaimportuj konkretny eksport w nawiasach klamrowych:
// 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
Lub możliwe jest użycie domyślnego wraz z nazwanymi importami w tej samej instrukcji:
import MyDefaultExport, { MyClass, MyOtherClass} from "./MyClass";
Import Przestrzeni Nazw
Możliwe jest również importowanie wszystkiego z pliku na obiekcie:
import * as MyClasses from "./MyClass";
// use MyClasses.MyClass, MyClasses.MyOtherClass and MyClasses.default here
Uwagi
- składnia preferuje domyślne eksportowanie jako nieco bardziej zwięzłe, ponieważ ich użycie jest bardziej powszechne (Zobacz dyskusję tutaj ).
-
Domyślny eksport jest w rzeczywistości nazwanym eksportem o nazwie
default
, więc możesz go zaimportować nazwanym importem:import { default as MyDefaultExport } from "./MyFileWithADefaultExport";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-10 14:20:46
export default
wpływa na składnię podczas importowania eksportowanej "rzeczy" , gdy pozwala importować, cokolwiek zostało wyeksportowane, wybierając nazwę w import
, bez względu na to, jaka była nazwa, gdy została wyeksportowana, po prostu dlatego, że jest oznaczona jako "domyślna".
Użyteczny przypadek użycia, który lubię (i używam), pozwala na eksport anonimowej funkcji bez jawnie konieczności jej nazwy, i tylko wtedy, gdy ta funkcja jest importowana, musi być podana nazwa:
Przykład:
Eksportuj 2 funkcje, jedna to 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;
}
Importuj powyższe funkcje. Wymyślanie nazwy dla default
jedynki:
// 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
Kiedy składnia {}
jest używana do importowania funkcji (lub zmiennej) oznacza to, że cokolwiek jest importowane, zostało już nazwane podczas eksportowania, więc trzeba zaimportować je przez dokładnie o tej samej nazwie, inaczej import nie zadziała.
Przykłady:
-
Domyślna funkcja musi być najpierw zaimportowana
import {divide}, square from './module_1.js
-
divide_1
nie był eksportowany wmodule_1.js
, więc nic nie będzie importowaneimport {divide_1} from './module_1.js
-
square
nie został wyeksportowany wmodule_1.js
, ponieważ{}
nakazuje silnikowi jawne szukanie o nazwie tylko eksport.import {square} from './module_1.js
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-22 16:16:50
Mała uwaga: proszę wziąć pod uwagę, że podczas importu z domyślnego eksportu, nazewnictwo jest całkowicie niezależne. Ma to rzeczywiście wpływ na refaktoryzacje.
Powiedzmy, że masz klasę Foo
taką jak ta z odpowiednim importem:
export default class Foo { }
// The name 'Foo' could be anything, since it's just an
// Identifier for the default export
import Foo from './Foo'
Teraz, jeśli zmienisz klasę Foo
na Bar
i zmienisz nazwę pliku, większość IDE nie dotknie twojego importu. Więc skończysz z tym:
export default class Bar { }
// The name 'Foo' could be anything, since it's just an
// Identifier for the default export.
import Foo from './Bar'
Szczególnie w maszynopisie, naprawdę doceniam eksport nazw i tym bardziej niezawodna refaktoryzacja. Różnica polega tylko na braku default
słowa kluczowego i nawiasów klamrowych. To btw również uniemożliwia dokonanie literówki w imporcie, ponieważ masz teraz sprawdzanie typu.
export class Foo { }
//'Foo' needs to be the class name. The import will be refactored
//in case of a rename!
import { Foo } from './Foo'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-31 02:04:17
From the documentation :
Nazwane eksportu są przydatne do eksportu kilku wartości. Podczas importu będzie można użyć tej samej nazwy, aby odnieść się do odpowiedniej wartości.
Jeśli chodzi o domyślny eksport, istnieje tylko jeden domyślny eksport na moduł. Domyślnym eksportem może być funkcja, Klasa, obiekt lub cokolwiek innego. Wartość tę należy traktować jako "główną" wartość eksportowaną, ponieważ będzie ona najprostsza do zaimportowania.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55
Gdy umieścisz default, nazywa się default export. Możesz mieć tylko jeden domyślny eksport na plik i możesz zaimportować go do innego pliku o dowolnej nazwie. Jeśli nie umieścisz domyślnego, nazwanego eksport, musisz zaimportować go do innego pliku o tej samej nazwie z klamrami w środku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-22 12:58:49
Miałem problem, że przeglądarka nie używa ES6 .
I have fix it with:
<script type="module" src="index.js"></script>
Moduł Typ mówi przeglądarce, aby używała ES6.
export const bla = [1,2,3];
import {bla} from './example.js';
To powinno zadziałać.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-31 02:05:48