Подтвердить что ты не робот

Класс импорта и вызов статического метода с модулями es6 с транспонтером babel

У меня есть следующее определение класса:

class EmberReflux{
  static createActions(actions) {
    console.log(actions);
  }
}

export { EmberReflux };

Когда я импортирую его из другого файла:

import EmberReflux from '../utils/ember-reflux';

let TodoActions = EmberReflux.createActions(
[
  "addItem",
  "undo",
  "redo"
]);

export { TodoActions };

Транспортировка выглядит следующим образом

define('ember-reflux/utils/todo-actions', ['exports', 'ember-reflux/utils/ember-reflux'], function (exports, EmberReflux) {

    'use strict';

    var TodoActions = EmberReflux['default'].createActions(["addItem", "undo", "redo"]);

    exports.TodoActions = TodoActions;

});

Я не уверен, что значение по умолчанию находится в EmberReflux['default']

Я хочу вызвать метод статического класса следующим образом:

EmberReflux.createActions

Но вместо этого я должен называть его следующим образом:

EmberReflux.EmberReflux.createActions
4b9b3361

Ответ 1

У вас есть два варианта:

  • Экспортируйте EmberReflux, как вы делаете:

    export { EmberReflux };
    

    а затем импортируйте его так:

    import { EmberReflux } from '../utils/ember-reflux';
    
  • Используйте default при экспорте:

    export default EmberReflux;
    

    и импортировать его (например, вы делаете):

     import EmberReflux from '../utils/ember-reflux';
    

В обоих случаях вы можете использовать свой EmberReflux как:

EmberReflux.createActions();

Ответ 2

У меня недостаточно репутации, чтобы комментировать, ответ alexpods идеален, но для понимания нашего друга Ced спросил:

Почему нам нужен дефолт во втором примере? Другими словами, почему мы не можем напрямую экспортировать EmberReflux?

Когда вы написали так:

export { EmberReflux };

Это то же самое написано:

export { EmberReflux: EmberReflux };

Для этого вам нужно запустить EmberReflux.EmberReflux, решение очень просто:

export default EmberReflux;