Экспорт экземпляра класса в Javascript - PullRequest
0 голосов
/ 26 января 2019

Я смотрел на этот код, где экземпляр класса экспортируется немного странным образом.

Предоставление отрублено. Экспортируется следующим образом:

    class RegisterStore {
    @observable success = false
    @observable failure = false
    @observable errors = {}
    ...
    }

export default new RegisterStore()
export { RegisterStore }

И он импортируется в index.js следующим образом:

import registerStore from './stores/RegisterStore'
...
const stores = {
registerStore
...
}

Почему в конце первого кода два экспорта ?
export default new RegisterStore() И
const NewRegisterStore = new RegisterStore(); export default NewRegisterStore эквивалентны ?

1 Ответ

0 голосов
/ 26 января 2019

Нет export default new RegisterStore() and export { RegisterStore } не равны. В export { RegisterStore } вы экспортируете класс как часть объекта экспорта, а в export default new RegisterStore() вы экспортируете экземпляр класса.

Далее. export default new RegisterStore() должно быть достаточно для нормальной работы. Повторный экспорт строки бесполезен до тех пор, пока вы не захотите импортировать несколько переменных из одного файла. В этом случае это будет выглядеть так:

export new RegisterStore();
export const anotherVariable = "TESTTEST";

и импортировать как:

import {RegisterStore, anotherVariable} from './stores/RegisterStore';

В дополнение к вашему последнему запросу: НЕТ

export default new RegisterStore() AND 
export default const RegisterStore = new RegisterStore() are equivalent?

тоже не эквивалентны.

Во-первых, export default const RegisterStore = new RegisterStore() выдает ошибку, потому что RegisterStore уже объявлен как класс, и вы снова объявляете его с помощью const.

Во-вторых:

export default const NewRegisterStore = new RegisterStore()

также неверно, потому что экспорт по умолчанию должен быть экспортирован как анонимный или переменные должны быть объявлены в первую очередь перед экспортом.

Для вашего примера это должно выглядеть так:

let NewRegisterStore; export default NewRegisterStore = new RegisterStore();

Итак:

export default new RegisterStore() AND 

let NewRegisterStore; export default NewRegisterStore = new RegisterStore(); are equivalent

Пожалуйста, прочитайте больше о "именном экспорте" и "экспорте по умолчанию" здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...