2016-03-28 18 views
103

は、私は以下の罰金であることを参照してください。`Export Default Const`はなぜ無効ですか?

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

しかし、これは誤りです。

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

はまだこれが細かいです:constである理由

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

が、これはしてください説明できますexport defaultで無効ですか?それは不要ですか?& export defaultと宣言されているものはconstかと思われますか?

答えて

120

constletように、it is a LexicalDeclarationVariableStatement、宣言)はあなたのブロック内の識別子を定義するために使用されます。

これをdefaultキーワードwhich expects a HoistableDeclaration, ClassDeclaration or AssignmentExpressionと組み合わせて使用​​してください。

したがって、SyntaxErrorです。


あなたがdefaultを使用する識別子を提供しないようにする必要がありますconstものにしたい場合。それ自体で

exportはそれが正しいですにVariableStatement宣言を受け入れます。自身の輸出私の知る限り


は、あなたの現在のスコープには何も追加しないでください。


次は、それが名前デフォルトを与えられますようexport default Tab;

TabAssignmentExpressionなっ罰金ですか?

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

結構ですAssignmentExpressionです。

+4

答えはエラーになる方法です。問題はまだなぜですか?このようにしてconstの悪用を防ぐ1つの理由は:export default const a = 1、b = 3、c = 4; –

+1

'' AFAIKエクスポート自体はあなたの現在のスコープに何も追加してはいけません "'これはあまり正確ではありません。 '' export const a = 1''は現在のコンテキストに 'a'を追加します。 'export default class MyClass {}'はあなたの現在のコンテキストにも 'MyClass'を追加するので、クラスの場合は' export default'を使っています。 – Ernesto

+1

@SergeyOrlovは、これによってエラーがどのように発生するのか説明していますが、なぜそれが必要なのかについてはほとんど分かりません。私はそれが一つの理由であるかどうかはわかりませんが、別の答えとして投稿してください。これはコメントではありません。 – Herick

18

あなたの代わりに

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

のあなたは、私が個人的に好きではない、このような何かを、行うことができ、聞かせて/ constのデフォルトエクスポートする場合にも、このような何かを行うことができます。

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

'const MyComponent;'は有効な構文ではありません - 'const'はそれが定義されているのと同じステートメントに割り当てられなければなりません。 – configurator

+1

私は悪いです。 –

3

ポールの答えがあなたが探しているものです。しかし、現実的な問題として、自分のReact + Reduxアプリケーションで使っていたパターンに興味があると思います。ここで

はあなたのコンポーネントを定義し、1つのステートメントでデフォルトとしてエクスポートする方法を示して、私のルートの1つから削ぎ落とした例です:

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 { /* ... */ } 

(注:私は、用語「シーン」を使用します任意のルートの最上位コンポーネント用)。

私はこれが役に立ちそうです。私はそれが従来のものよりはるかにきれいに見えると思う。​​

関連する問題