Классы ES6 и использование функций в узле - PullRequest
0 голосов
/ 02 марта 2019

Я изучал некоторые React и использую классы ES6 для написания своих компонентов на основе классов.Я работаю над небольшим проектом Node, и ни один из этих синтаксисов не работает.

class Handler {
  handleReq = () => {
    this.ctx = ctx;
  };

  testFunc = async () => {

  };
}

export default (HandleReq = Handler.prototype.handleReq);

Что не так с этим синтаксисом?Разве это не работает в узле?Мне пришлось установить esm, чтобы синтаксис импорта / экспорта работал правильно, но это все равно не скомпилируется.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Как уже отмечали другие, поля классов еще не являются частью синтаксиса ES6 без переноса.Если вы хотите избежать шага сборки, эквивалентный синтаксис узла:

// import someImport from './some-import' is invalid, instead use:
const someImport = require('./some-import');

class Handler {
  constructor() {
    this.handleReq = this.handleReq.bind(this);
    this.testFunc = this.testFunc.bind(this);
  }

  handleReq() {
    this.ctx = ctx; // Where is ctx coming from?
  }

  async testFunc() {

  }
}

// export default Handler.prototype.handleReq is invalid, instead use:
module.exports = Handler.prototype.handleReq;
0 голосов
/ 02 марта 2019

Поля класса все еще находятся на этапе предложения (этап 3 уже, поэтому они скоро станут частью языка).Это означает, что некоторые среды выполнения могут уже поддерживать их, но пока не обязаны.Чтобы использовать предложения сегодня надежно, вы должны передать их с помощью BabelJS .

Это приведет к тому, что ваш код перейдет к следующему ES6:

 class Handler {
  constructor() {
    this.handleReq = () => {
      this.ctx = ctx;
    };

    this.testFunc = async () => {
    };
   }
 }

, поэтому эти методы на самом деле толькосуществует в экземпляре после построения, а не в Handler.prototype.

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