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

2020/09/29 21:41 · javascript ·  · 0评论

我看到以下情况很好:

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


如果您想要const某件事,则需要提供标识符而不要使用default

export本身接受变量声明声明的权利。


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>);

如果在文件名中说明了组件名称MyComponent.js,请不要命名该组件,以使代码保持苗条。

import React from 'react'

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

更新:由于在堆栈跟踪中将其标记为未知,因此不建议使用

保罗的答案就是您要寻找的答案。但是,实际上,我想您可能会对我在自己的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 )

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

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

var message2 ='我已导出';

导出默认message2;

export const message ='我也被导出'

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

从“ ./test”导入{消息};

要么

从“ ./test”导入消息;

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

default 基本上是 const someVariableName

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

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

本文地址:http://javascript.askforanswer.com/weishenmedaochumorenchangliangwuxiao.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!