¿Por qué `Exportar Const Predeterminado ' no es válido?


Veo que lo siguiente está bien:

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

Sin embargo, esto es incorrecto:

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

Sin embargo, esto está bien:

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

¿Puede explicarse esto por favor por qué const no es válido con export default? ¿Es una adición innecesaria y cualquier cosa declarada como export default se presume como const o tal?

Author: Kayote, 2016-03-28

5 answers

const es como let, es una declaración léxica (VariableStatement, Declaration ) se utiliza para definir un identificador en su bloque.

Estás tratando de mezclar esto con la palabra clave default , que espera una expresión de asignación HoistableDeclaration, ClassDeclaration o para seguirlo.

Por lo Tanto es un SyntaxError.


Si quieres const algo que necesidad de proporcionar el identificador y no utilizar default.

export por sí mismo acepta una Declaración variable o Declaración a su derecho.


AFAIK la exportación en sí misma no debería añadir nada a su ámbito actual.


Lo siguiente está bien export default Tab;

Tab se convierte en un AssignmentExpression ya que se le da el nombre default ?

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

Aquí Tab = connect( mapState, mapDispatch )( Tabs );es una expresión de asignación .

 177
Author: Paul S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-28 11:45:12

También puede hacer algo como esto si desea exportar por defecto un const/let, en lugar de

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

Puedes hacer algo como esto, que no me gusta personalmente.

let MyComponent;
export default MyComponent = ({ }) => (<p>Now Export On SameLine</p>);
 28
Author: Adeel Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-26 08:25:16

La respuesta de Pablo es la que estás buscando. Sin embargo, como cuestión práctica, creo que puede estar interesado en el patrón que he estado utilizando en mis propias aplicaciones React+Redux.

Aquí hay un ejemplo de una de mis rutas, que muestra cómo puede definir su componente y exportarlo como predeterminado con una sola instrucción:

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 { /* ... */ }

(Nota: Uso el término "Escena" para el componente de nivel superior de cualquier ruta).

Espero que esto sea útil. Creo que es mucho más limpio que el convencional connect( mapState, mapDispatch )( BareComponent )

 6
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-01 16:19:00

Si el nombre del componente se explica en el nombre del archivo MyComponent.js, simplemente no nombre el componente, mantiene el código delgado.

import React from 'react'

export default (props) =>
    <div id='static-page-template'>
        {props.children}
    </div>
 3
Author: Kevin Danikowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-15 16:38:49

La respuesta compartida por Pablo es la mejor. Para ampliar más,

Solo puede haber una exportación predeterminada por archivo. Mientras que puede haber más de una exportación const. La variable predeterminada se puede importar con cualquier nombre, mientras que la variable const se puede importar con cualquier nombre.

Var message2 = 'I am exported';

Exportar mensaje default 2;

Export const message = 'I am also exported'

En el lado de las importaciones tenemos que importarlo como esto:

Importar { mensaje} desde './ test";

O

Importar mensaje desde './ test";

Con la primera importación, se importa la variable const mientras que, con la segunda, se importará la predeterminada.

 0
Author: Bharat Raj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-13 17:06:03