Dlaczego` Export Default Const ' jest niepoprawny?

Widzę, że w porządku jest:

const Tab = connect( mapState, mapDispatch )( Tabs );
export default Tab;
Jednak jest to niepoprawne:
export default const Tab = connect( mapState, mapDispatch )( Tabs );

Ale To jest w porządku:

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

Czy można to wyjaśnić dlaczego const jest nieprawidłowe z export default? Czy jest to zbędny dodatek i cokolwiek deklarowane jako {[4] } jest domniemane const lub takie?

Author: Kayote, 2016-03-28

5 answers

const jest jak let, jest to Leksykaldeklaracja (VariableStatement, Declaration ) służy do definiowania identyfikatora w Twoim bloku.

Próbujesz zmieszać to ze słowem kluczowym default , który oczekuje HoistableDeclaration, ClassDeclaration lub Przypisyzobacz też podążać za nim.

Dlatego jest to SyntaxError.


If you want to const something you należy podać identyfikator i nie używać default.

export sama przyjmuje VariableStatement lub Deklaracja do swojej racji.


AFAIK eksport sam w sobie nie powinien niczego dodawać do obecnego zakresu.


Poniżej jest dobrze export default Tab;

Tab staje się AssignmentExpression Jak podano nazwę default ?

export default Tab = connect( mapState, mapDispatch )( Tabs ); jest w porządku

Tutaj Tab = connect( mapState, mapDispatch )( Tabs ); jest przypisanie ekspresji.

 177
Author: Paul S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-28 11:45:12

Możesz również zrobić coś takiego, jeśli chcesz wyeksportować domyślnie const / let, zamiast

const MyComponent = ({ attr1, attr2 }) => (<p>Now Export On other Line</p>);
export default MyComponent
Możesz zrobić coś takiego, czego osobiście nie lubię.
let MyComponent;
export default MyComponent = ({ }) => (<p>Now Export On SameLine</p>);
 28
Author: Adeel Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-26 08:25:16

Paul 's answer is the one you' re looking for. Jednak, w praktyce, myślę, że może Cię zainteresować wzór, którego używam w moich własnych aplikacjach React + Redux.

Oto okrojony przykład z jednej z moich tras, pokazujący, jak można zdefiniować komponent i wyeksportować go jako domyślny za pomocą pojedynczej instrukcji:

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

(Uwaga: używam terminu "Scena" dla najwyższego poziomu komponentu dowolnej trasy).

Mam nadzieję, że to pomoże. Myślę, że jest o wiele czystszy niż konwencjonalne connect( mapState, mapDispatch )( BareComponent )
 6
Author: Tom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-01 16:19:00

Jeśli nazwa komponentu jest wyjaśniona w nazwie pliku MyComponent.js, po prostu nie nazywaj komponentu, zachowaj wąski kod.

import React from 'react'

export default (props) =>
    <div id='static-page-template'>
        {props.children}
    </div>
 3
Author: Kevin Danikowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-15 16:38:49

Odpowiedź udostępniona przez Pawła jest najlepsza. Aby rozwinąć więcej,

Dla każdego pliku może być tylko jeden domyślny eksport. Natomiast może być więcej niż jeden eksport const. Domyślna zmienna może być importowana z dowolną nazwą, natomiast zmienna const może być importowana z dowolną nazwą.

Var message2 = 'jestem eksportowany';

Export default message2;

Export const message = 'I am also exported'

Po stronie importu musimy importować jak to:

Import {wiadomość} z"./ test";

LUB

Import wiadomości z"./ test";

Przy pierwszym imporcie importowana jest zmienna const, podczas gdy przy drugim importowana jest domyślna.

 0
Author: Bharat Raj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 17:06:03