关于javascript:为什么`Export Default Const`无效?

Why Is `Export Default Const` invalid?

我看到以下情况很好:

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

但是,这是不正确的:

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

但这很好:

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

请解释一下为什么const对于export default无效吗? 它是不必要的加法吗,并且声明为export default的任何内容都假定为const或类似内容?


const类似于let,它是一个LexicalDeclaration(变量声明,声明),用于在您的块中定义标识符。

您正在尝试将其与default关键字混合使用,该关键字要求遵循HoistableDeclaration,ClassDeclaration或AssignmentExpression。

因此,它是一个SyntaxError。

如果要const,则需要提供标识符而不使用default

export本身接受正确的VariableStatement或声明。

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

The following is fineexport default Tab;

Tab变成了AssignmentExpression,因为它被赋予了默认名称?

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

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


如果您要导出默认的const / let而不是

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

您可以执行类似我个人不喜欢的操作。

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


如果在文件名MyComponent.js中说明了组件名称,请不要命名该组件,以使代码更简洁。

1
2
3
4
5
import React from 'react'

export default (props) =>
   
        {props.children}


Paul的答案就是您要寻找的答案。但是,实际上,我想您可能会对我在自己的React + Redux应用程序中使用的模式感兴趣。

这是我的一条路线的精简示例,显示了如何定义组件并将其作为默认语句导出为单个语句:

1
2
3
4
5
6
7
8
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 )看起来更干净


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

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

var message2 = 'I am exported';

export default message2;

export const message = 'I am also exported'

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

import { message } from './test';

要么

import message from './test';

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


default基本上是const someVariableName

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


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