为什么“导出默认常量”无效?

我看到以下是好的:

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

但是,这是不正确的:

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

然而这很好:

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

请解释为什么const export default是无效的? 这是一个不必要的补充和任何声明为export default是推定为一个const或这样的?

const就像let它是一个LexicalDeclarationVariableStatement,Declaration ),用来在你的块中定义一个标识符。

您正试图将其与default关键字混合使用,该关键字需要使用HoistableDeclaration,ClassDeclarationAssignmentExpression

因此它是一个SyntaxError


如果你想固定一些东西,你需要提供标识符,而不是使用default

export本身接受一个VariableStatement声明是正确的。


AFAIK出口本身不应该添加任何东西到您目前的范围。


以下是很好的export default Tab;

Tab变成AssignmentExpression,因为它的名字是默认的

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

这里Tab = connect( mapState, mapDispatch )( Tabs ); 是一个AssignmentExpression

你也可以做这样的事情,如果你想导出默认的一个const / let,而不是

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

你可以做这样的事情,我个人不喜欢。

 let MyComponent; export default MyComponent = ({ }) => (<p>Now Export On SameLine</p>); 

保罗的答案是你正在寻找的。 但是,实际上,我认为您可能对我在自己的React + Redux应用程序中使用的模式感兴趣。

下面是我的一个路由的精简示例,展示了如何定义组件并使用单个语句将其导出为默认值:

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

(注:我使用术语“场景”作为任何路线的顶层组件)。

我希望这是有帮助的。 我认为它比传统的connect( mapState, mapDispatch )( BareComponent )更清洁connect( mapState, mapDispatch )( BareComponent )