为什么`Export Default Const`无效?

时间:2016-03-28 11:16:20

标签: javascript scope export const default

我看到以下情况很好:

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

然而,这是不正确的:

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

然而这很好:

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

是否可以解释为什么constexport default无效?这是不必要的补充吗?声明为export default的任何内容都被假定为const或类似的?

7 个答案:

答案 0 :(得分:224)

CollectionViewconst类似,it is a LexicalDeclaration VariableStatement,声明)用于在块中定义标识符。

您正尝试将其与let关键字which expects a HoistableDeclaration, ClassDeclaration or AssignmentExpression混合使用以跟进它。

因此它是 SyntaxError

如果您想default需要提供标识符,请不要使用const

default本身接受 VariableStatement 声明

AFAIK导出本身不应该在当前范围内添加任何内容。

  

以下内容正常export

export default Tab;成为 AssignmentExpression ,因为它的名称为 default

  

Tab很好

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

答案 1 :(得分:31)

如果你想导出默认的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>);

答案 2 :(得分:7)

保罗的答案是你正在寻找的答案。但是,实际上,我认为您可能对我在自己的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 )

更清晰

答案 3 :(得分:6)

如果在文件名MyComponent.js中解释了组件名称,则不要将组件命名,使代码保持苗条。

import React from 'react'

export default (props) =>
    <div id='static-page-template'>
        {props.children}
    </div>

答案 4 :(得分:1)

保罗的答案是最好的。要扩展更多,

每个文件只能有一个默认导出。而可以有多个const出口。可以使用任何名称导入默认变量,而可以使用任何名称导入const变量。

  

var message2 ='我已被导出';

     

导出默认消息2;

     

export const message ='我也被导出'

在导入方面,我们需要这样导入:

  

从'./test'导入{消息};

  

从“ ./test”导入消息;

第一次导入时,将导入const变量,而第二次导入时,将导入默认变量。

答案 5 :(得分:0)

default基本上是const someVariableName

您不需要命名标识符,因为它是文件的默认导出,并且可以在导入文件时随意命名,因此default只是将变量赋值压缩为一个关键字。 / p>

答案 6 :(得分:-1)

对我来说,这只是打字稿的许多特质之一(强调idio(t)),它使人们拔头发并诅咒开发人员。也许他们可以努力提出更多可理解的错误消息。