Je vois que ce qui suit est bien:
const Tab = connect( mapState, mapDispatch )( Tabs );
export default Tab;
Cependant, ceci est incorrect:
export default const Tab = connect( mapState, mapDispatch )( Tabs );
C'est pourtant bien:
export default Tab = connect( mapState, mapDispatch )( Tabs );
Cela peut-il être expliqué s'il vous plaît pourquoi const
est invalide avec export default
? S'agit-il d'un ajout inutile et de tout ce qui est déclaré comme export default
présumé const
tel ou tel?
export default Tab = connect( mapState, mapDispatch )( Tabs );
devrait êtreexport default connect( mapState, mapDispatch )( Tabs );
. Vous exportez le résultat de l'appel de fonction, pas la variable Tab.Réponses:
const
c'est commelet
, c'est une LexicalDeclaration ( VariableStatement, Declaration ) utilisée pour définir un identifiant dans votre bloc.Vous essayez de mélanger cela avec le
default
mot clé, qui attend une HoistableDeclaration, ClassDeclaration ou AssignmentExpression pour le suivre.C'est donc un SyntaxError .
Si vous voulez
const
quelque chose, vous devez fournir l'identifiant et ne pas l'utiliserdefault
.export
accepte par lui-même une déclaration ou une déclaration variable à sa droite.AFAIK l'exportation en soi ne devrait rien ajouter à votre portée actuelle.
Tab
devient un AssignmentExpression car on lui donne le nom par défaut ?Voici
Tab = connect( mapState, mapDispatch )( Tabs );
une AssignmentExpression .la source
"AFAIK the export in itself should not add anything to your current scope"
Ce n'est pas si précis, car celaexport const a = 1
ajoutea
à votre contexte actuel. Et même avecexport default
en cas de cours, car celaexport default class MyClass {}
s'ajoute égalementMyClass
à votre contexte actuel.let a; export default a;
puis mettre à jour la variable a alors qu'elle a déjà été importée dans un autre module, pourquoi la variable par défaut d'exportation ne se met-elle pas à jour?const foo = function bar() {}
et aussiconst Foo = class Bar {}
, mais pasconst foo = const bar = 1
. Pareil pourexport default
, c'est commeconst foo =
.Vous pouvez également faire quelque chose comme ceci si vous souhaitez exporter par défaut un const / let, au lieu de
Vous pouvez faire quelque chose comme ça, que je n'aime pas personnellement.
la source
Si le nom du composant est expliqué dans le nom du fichier
MyComponent.js
, ne nommez simplement pas le composant, le code reste mince.Mise à jour : Étant donné que cela le marque comme inconnu dans le suivi de pile, il n'est pas recommandé
la source
Unknown
partout où est l'exportation par défaut sans nomLa réponse de Paul est celle que vous recherchez. Cependant, en pratique, je pense que vous pouvez être intéressé par le modèle que j'utilise dans mes propres applications React + Redux.
Voici un exemple dépouillé de l'un de mes itinéraires, montrant comment vous pouvez définir votre composant et l'exporter par défaut avec une seule instruction:
(Remarque: j'utilise le terme «scène» pour le composant de niveau supérieur de n'importe quel itinéraire).
J'espère que ceci est utile. Je pense que c'est beaucoup plus propre que le conventionnel
connect( mapState, mapDispatch )( BareComponent )
la source
@connect
est le seul décorateur que j'utilise, je ne l'utilise qu'avec des composants attachés à un magasin redux, presque chacun d'entre eux est une "route" et presque chaque route doit avoir un état (et ne peut donc pas être une fonction pure) .La réponse partagée par Paul est la meilleure. Pour étendre davantage,
Il ne peut y avoir qu'une seule exportation par défaut par fichier. Alors qu'il peut y avoir plus d'une exportation const. La variable par défaut peut être importée avec n'importe quel nom, tandis que la variable const peut être importée avec son nom particulier.
Du côté des importations, nous devons l'importer comme ceci:
ou
Avec la première importation, la variable const est importée tandis qu'avec la seconde, la variable par défaut sera importée.
la source
default
est fondamentalementconst someVariableName
Vous n'avez pas besoin d'un identifiant nommé, car il s'agit de l'exportation par défaut du fichier et vous pouvez le nommer comme vous le souhaitez lorsque vous l'importez, il
default
suffit donc de condenser l'affectation des variables en un seul mot-clé.la source
Pour moi, ce n'est là qu'une des nombreuses idiosyncrasies (l'accent sur l'idio (t)) de dactylographie qui oblige les gens à se coiffer et à maudire les développeurs. Peut-être qu'ils pourraient travailler à trouver des messages d'erreur plus compréhensibles.
la source