Vejo que o seguinte é bom:
const Tab = connect( mapState, mapDispatch )( Tabs );
export default Tab;
No entanto, isso está incorreto:
export default const Tab = connect( mapState, mapDispatch )( Tabs );
No entanto, isso é bom:
export default Tab = connect( mapState, mapDispatch )( Tabs );
Isso pode ser explicado, por que const
é inválido com export default
? É uma adição desnecessária e qualquer coisa declarada como export default
é presumida const
?
export default Tab = connect( mapState, mapDispatch )( Tabs );
deveria serexport default connect( mapState, mapDispatch )( Tabs );
. Você está exportando o resultado da chamada de função, não a variável Tab.Respostas:
const
é comolet
, é uma LexicalDeclaration ( VariableStatement, Declaration ) usada para definir um identificador no seu bloco.Você está tentando misturar isso com a
default
palavra - chave, que espera que um HoistableDeclaration, ClassDeclaration ou AssignmentExpression o siga.Portanto, é um SyntaxError .
Se você deseja
const
algo, é necessário fornecer o identificador e não usá-lodefault
.export
por si só aceita uma VariableStatement ou Declaration à sua direita.AFAIK a exportação em si não deve adicionar nada ao seu escopo atual.
Tab
se torna uma AssignmentExpression , pois recebe o nome padrão ?Aqui
Tab = connect( mapState, mapDispatch )( Tabs );
está uma AssignmentExpression .fonte
"AFAIK the export in itself should not add anything to your current scope"
Isso não é tão preciso, porqueexport const a = 1
contribuia
para o seu contexto atual. E mesmoexport default
no caso de aulas, porque tambémexport default class MyClass {}
contribuiMyClass
para o seu contexto atual.let a; export default a;
e atualizar a variável a quando ela já tiver sido importada para outro módulo, por que a variável padrão de exportação não é atualizada?const foo = function bar() {}
e tambémconst Foo = class Bar {}
, mas nãoconst foo = const bar = 1
. O mesmo paraexport default
, é comoconst foo =
.Você também pode fazer algo assim se desejar exportar uma const / let padrão, em vez de
Você pode fazer algo assim, que eu não gosto pessoalmente.
fonte
Se o nome do componente for explicado no nome do arquivo
MyComponent.js
, apenas não o nomeie, mantém o código reduzido.Atualização : como isso é identificado como desconhecido no rastreamento de pilha, não é recomendável
fonte
Unknown
em todos os lugares onde é exportação padrão sem nomeA resposta de Paulo é a que você está procurando. No entanto, por uma questão prática, acho que você pode estar interessado no padrão que tenho usado em meus próprios aplicativos React + Redux.
Aqui está um exemplo simplificado de uma das minhas rotas, mostrando como você pode definir seu componente e exportá-lo como padrão com uma única instrução:
(Nota: eu uso o termo "Cena" para o componente de nível superior de qualquer rota).
Espero que isto seja útil. Eu acho que é muito mais limpo do que o convencional
connect( mapState, mapDispatch )( BareComponent )
fonte
@connect
é o único decorador que eu uso, eu o uso apenas com componentes conectados a um repositório redux, quase todos são uma "rota" e quase toda rota deve ter estado (e, portanto, não pode ser uma função pura) .A resposta compartilhada por Paulo é a melhor. Para expandir mais,
Pode haver apenas uma exportação padrão por arquivo. Considerando que pode haver mais de uma const exportações. A variável padrão pode ser importada com qualquer nome, enquanto a variável const pode ser importada com seu nome específico.
No lado das importações, precisamos importá-lo assim:
ou
Com a primeira importação, a variável const é importada, enquanto, com a segunda, a padrão é importada.
fonte
default
é basicamenteconst someVariableName
Você não precisa de um identificador nomeado porque é a exportação padrão para o arquivo e pode nomeá-lo como quiser ao importá-lo; portanto,
default
está apenas condensando a atribuição de variável em uma única palavra-chave.fonte
Para mim, essa é apenas uma das muitas idiossincrasias (ênfase no idiota (t)) do texto datilografado que faz com que as pessoas arrancem os cabelos e amaldiçoem os desenvolvedores. Talvez eles possam trabalhar com mensagens de erro mais compreensíveis.
fonte