Pourquoi 'Export Default Const' n'est-il pas valide?

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 );

Pourtant, c'est bien:

export default Tab = connect( mapState, mapDispatch )( Tabs );

Peut-on expliquer pourquoi const est invalide avec export default? Est-ce un ajout inutile et tout ce qui est déclaré comme {[4] } est présumé const ou tel?

169
demandé sur Kayote 2016-03-28 14:16:20

5 réponses

const c'est comme let, il est un LexicalDeclaration (VariableStatement, Déclaration) utilisé pour définir un identifiant dans votre bloc.

Vous essayez de le mélanger avec le default clé, qui s'attend à un HoistableDeclaration, ClassDeclaration ou AssignmentExpression pour le suivre.

C'est donc une SyntaxError.


Si vous voulez const quelque chose que vous besoin de fournir l'identifiant et ne pas utiliser default.

export par lui-même accepte un VariableStatement ou Déclaration de à sa droite.


AFAIK l'exportation en elle-même ne devrait rien ajouter à votre portée actuelle.


Ce qui suit est bien export default Tab;

Tab devient un AssignmentExpression, comme il est donné le nom de par défaut ?

export default Tab = connect( mapState, mapDispatch )( Tabs ); est très bien

Ici Tab = connect( mapState, mapDispatch )( Tabs ); est une AssignmentExpression .

177
répondu Paul S. 2016-03-28 11:45:12

Vous pouvez également faire quelque chose comme ceci si vous voulez exporter par défaut un const/let, au lieu de

const MyComponent = ({ attr1, attr2 }) => (<p>Now Export On other Line</p>);
export default MyComponent

Vous pouvez faire quelque chose comme ça, que je n'aime pas personnellement.

let MyComponent;
export default MyComponent = ({ }) => (<p>Now Export On SameLine</p>);
28
répondu Adeel Imran 2017-09-26 08:25:16

La réponse de Paul est celle que vous cherchez. Cependant, en pratique, je pense que vous pourriez être intéressé par le modèle que j'ai utilisé dans mes propres applications React+Redux.

Voici un exemple dépouillé d'une de mes routes, montrant comment vous pouvez définir votre composant et l'exporter par défaut avec une seule instruction:

import React from 'react';
import { connect } from 'react-redux';

@connect((state, props) => ({
    appVersion: state.appVersion
    // other scene props, calculated from app state & route props
}))
export default class SceneName extends React.Component { /* ... */ }

(Remarque: j'utilise le terme "scène" pour le composant de niveau supérieur de n'importe quel itinéraire).

J'espère que cela est utile. Je pense que c'est beaucoup plus propre que le conventionnel connect( mapState, mapDispatch )( BareComponent )

6
répondu Tom 2017-09-01 16:19:00

Si le nom du composant est expliqué dans le nom de fichier MyComponent.js, ne nommez pas le composant, gardez le code mince.

import React from 'react'

export default (props) =>
    <div id='static-page-template'>
        {props.children}
    </div>
3
répondu Kevin Danikowski 2018-04-15 16:38:49

La réponse partagée par Paul est la meilleure. Pour développer plus,

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, alors que la variable const peut être importée avec n'importe quel nom.

Var message2 = 'je suis exporté';

Exporter le message par défaut2;

Exportation const message = 'je suis également exporté'

Du côté des importations, nous devons l'importer comme ceci:

Importer { message} depuis './ test";

Ou

Importer le message de './ test";

Avec la première importation, la variable const est importée alors que, avec la seconde, la variable par défaut sera importée.

0
répondu Bharat Raj 2018-07-13 17:06:03