为什么“导出默认常量”无效?
我看到以下是好的:
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
, 它是一个LexicalDeclaration ( VariableStatement,Declaration ),用来在你的块中定义一个标识符。
您正试图将其与default
关键字混合使用,该关键字需要使用HoistableDeclaration,ClassDeclaration或AssignmentExpression 。
因此它是一个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 )