Ich sehe, dass Folgendes in Ordnung ist:
const Tab = connect( mapState, mapDispatch )( Tabs );
export default Tab;
Dies ist jedoch falsch:
export default const Tab = connect( mapState, mapDispatch )( Tabs );
Doch das ist in Ordnung:
export default Tab = connect( mapState, mapDispatch )( Tabs );
Kann dies bitte erklärt werden, warum const
mit ungültig ist export default
? Ist es eine unnötige Ergänzung und irgendetwas, das als export default
a const
oder so vermutet wird ?
export default Tab = connect( mapState, mapDispatch )( Tabs );
sollte seinexport default connect( mapState, mapDispatch )( Tabs );
. Sie exportieren das Ergebnis des Funktionsaufrufs, nicht die Variable Tab.Antworten:
const
ist wielet
, es ist LexicalDeclaration ( VariableStatement, Deklaration ) verwendet , um eine Kennung in dem Block zu definieren.Sie versuchen, dies mit dem
default
Schlüsselwort zu mischen , das erwartet , dass eine HoistableDeclaration, ClassDeclaration oder AssignmentExpression darauf folgt.Daher ist es ein SyntaxError .
Wenn Sie
const
etwas möchten, müssen Sie die Kennung angeben und nicht verwendendefault
.export
selbst akzeptiert eine VariableStatement oder Deklaration zu seiner Rechten.AFAIK Der Export an sich sollte Ihrem aktuellen Umfang nichts hinzufügen.
Tab
wird ein AssignmentExpression, da er den Standardnamen erhält ?Hier
Tab = connect( mapState, mapDispatch )( Tabs );
ist ein AssignmentExpression .quelle
"AFAIK the export in itself should not add anything to your current scope"
Das ist nicht so genau, weilexport const a = 1
fügta
zu Ihrem aktuellen Kontext. Und selbst mitexport default
bei Klassen, daexport default class MyClass {}
fügtMyClass
zu Ihrem aktuellen Kontext als auch.let a; export default a;
und dann die Variable a aktualisiere, wenn sie bereits in ein anderes Modul importiert wurde, warum wird die Standardvariable für den Export nicht aktualisiert?const foo = function bar() {}
und auchconst Foo = class Bar {}
, aber nichtconst foo = const bar = 1
. Das gleiche gilt fürexport default
, es ist einfach soconst foo =
.Sie können auch so etwas tun, wenn Sie stattdessen standardmäßig eine const / let exportieren möchten
Sie können so etwas tun, was ich persönlich nicht mag.
quelle
Wenn der Komponentenname im Dateinamen erläutert wird,
MyComponent.js
benennen Sie die Komponente einfach nicht, da der Code schlank bleibt.Update : Da dies in der Stapelverfolgung als unbekannt gekennzeichnet ist, wird es nicht empfohlen
quelle
Unknown
überall dort, wo unbenannter Standardexport istPauls Antwort ist die, die Sie suchen. Aus praktischen Gründen könnten Sie jedoch an dem Muster interessiert sein, das ich in meinen eigenen React + Redux-Apps verwendet habe.
Hier ist ein reduziertes Beispiel von einer meiner Routen, das zeigt, wie Sie Ihre Komponente definieren und mit einer einzigen Anweisung als Standard exportieren können:
(Hinweis: Ich verwende den Begriff "Szene" für die oberste Komponente einer Route.)
Ich hoffe das ist hilfreich. Ich denke, es sieht viel sauberer aus als das konventionelle
connect( mapState, mapDispatch )( BareComponent )
quelle
@connect
ist der einzige Dekorateur, den ich verwende. Ich verwende ihn nur mit Komponenten, die an einen Redux-Speicher angeschlossen sind. Fast jede dieser Komponenten ist eine "Route", und fast jede Route sollte einen Status haben (und kann daher keine reine Funktion sein.) .Die Antwort von Paulus ist die beste. Um mehr zu erweitern,
Es kann nur einen Standardexport pro Datei geben. Während es mehr als einen konstanten Export geben kann. Die Standardvariable kann mit einem beliebigen Namen importiert werden, während die const-Variable mit ihrem bestimmten Namen importiert werden kann.
Auf der Importseite müssen wir es wie folgt importieren:
oder
Beim ersten Import wird die Variable const importiert, während beim zweiten Import die Standardvariable importiert wird.
quelle
default
ist im Grundeconst someVariableName
Sie benötigen keinen benannten Bezeichner, da dies der Standardexport für die Datei ist und Sie sie beim Importieren beliebig benennen können, sodass
default
die Variablenzuweisung nur in einem einzigen Schlüsselwort zusammengefasst wird.quelle
Für mich ist dies nur eine von vielen Eigenheiten (Betonung der Redewendung (t)) des Typoskripts, die dazu führen, dass sich die Leute die Haare ausreißen und die Entwickler verfluchen. Vielleicht könnten sie daran arbeiten, verständlichere Fehlermeldungen zu finden.
quelle