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 esto explicarse por qué const
no es válido export default
? ¿Es una adición innecesaria y algo declarado como export default
se presume una const
o tal?
export default Tab = connect( mapState, mapDispatch )( Tabs );
debería serexport default connect( mapState, mapDispatch )( Tabs );
. Está exportando el resultado de la llamada a la función, no la variable Tab.Respuestas:
const
es comolet
, es una Declaración Lexical ( Declaración de Variable, Declaración ) utilizada para definir un identificador en su bloque.Está intentando mezclar esto con la
default
palabra clave, que espera que una declaración HoistableDeclaration, ClassDeclaration o AssignmentExpression lo siga.Por lo tanto, es un SyntaxError .
Si desea
const
algo, debe proporcionar el identificador y no usarlodefault
.export
por sí mismo acepta una Declaración Variable o Declaración a su derecha.AFAIK la exportación en sí misma no debería agregar nada a su alcance actual.
Tab
se convierte en AssignmentExpression ya que recibe el nombre predeterminado ?Aquí
Tab = connect( mapState, mapDispatch )( Tabs );
hay una AssignmentExpression .fuente
"AFAIK the export in itself should not add anything to your current scope"
Esto no es tan preciso, porque seexport const a = 1
agregaa
a su contexto actual. E inclusoexport default
en el caso de las clases, porque también seexport default class MyClass {}
agregaMyClass
a su contexto actual.let a; export default a;
y luego actualizo la variable a cuando ya se ha importado a otro módulo, ¿por qué no se actualiza la variable predeterminada de exportación?const foo = function bar() {}
y tambiénconst Foo = class Bar {}
, pero noconst foo = const bar = 1
. Lo mismo paraexport default
, es comoconst foo =
.También puede hacer algo como esto si desea exportar por defecto un const / let, en lugar de
Puedes hacer algo como esto, que no me gusta personalmente.
fuente
Si el nombre del componente se explica en el nombre del archivo
MyComponent.js
, simplemente no nombre el componente, mantiene el código delgado.Actualización : como esto lo etiqueta como desconocido en el seguimiento de la pila, no se recomienda
fuente
Unknown
todas partes donde es de exportación predeterminado sin nombreLa respuesta de Paul 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 usando en mis propias aplicaciones React + Redux.
Aquí hay un ejemplo simplificado de una de mis rutas, que muestra cómo puede definir su componente y exportarlo como predeterminado con una sola declaración:
(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 )
fuente
@connect
es el único decorador que uso, solo lo uso con componentes que están conectados a una tienda redux, casi cada uno de ellos es una "ruta", y casi todas las rutas deben tener estado (y por lo tanto no puede ser una función pura) .La respuesta compartida por Paul 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 constante. La variable predeterminada se puede importar con cualquier nombre, mientras que la variable const se puede importar con su nombre particular.
En el lado de las importaciones, necesitamos importarlo así:
o
Con la primera importación, la variable const se importa mientras que, con la segunda, se importará la predeterminada.
fuente
default
es básicamenteconst someVariableName
No necesita un identificador con nombre porque es la exportación predeterminada para el archivo y puede
default
asignarle el nombre que desee cuando lo importe, por lo que solo se condensa la asignación de variables en una sola palabra clave.fuente
Para mí, esta es solo una de las muchas idiosincrasias (énfasis en el idio (t)) del mecanografiado que hace que las personas se quiten el pelo y maldigan a los desarrolladores. Tal vez podrían trabajar para generar mensajes de error más comprensibles.
fuente