我看到以下内容很好:
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
之类的?
原文由 Kayote 发布,翻译遵循 CC BY-SA 4.0 许可协议
const
就像let
一样, 它是一个 LexicalDeclaration ( VariableStatement, Declaration ) 用于在你的块中定义一个标识符。您正在尝试将其与
default
关键字混合,该关键字 需要 HoistableDeclaration、ClassDeclaration 或 AssignmentExpression 跟随它。因此它是一个 SyntaxError 。
如果你想
const
一些东西,你需要提供标识符而不是使用default
。export
本身接受一个 变量 声明或 _声明_。Tab
变成了一个 AssignmentExpression ,因为它被命名为 default?这里
Tab = connect( mapState, mapDispatch )( Tabs );
是一个 AssignmentExpression 。更新: 想象问题的另一种方式
如果您试图从概念上理解这一点并且上面的规范推理没有帮助,请将其视为 “如果
default
是合法标识符而不是保留令牌,那么编写export default Foo;
和export default const Foo = 1;
?”在这种情况下,扩展的编写方式将是
有一个有效的论点,扩展 应该 是
但是,根据 Sergey 的评论,这将变得模棱两可,因此明确地编写此模式更有意义。