EventEmitter.prototype вactjs, this.on не работает и говорит, что это не функция - PullRequest
0 голосов
/ 06 мая 2018
this.on('change', callback);

и

this.removeListener('change', callback);

не работают на моих addChangeListener и removeChangeListener. Я импортировал EventEmitter и использовал его с object-assign ("object-assign": "^4.1.1").

Но выдает ошибку:

bundle.js: 41229 Uncaught TypeError: this.on не является функцией
at Object.addChangeListener (bundle.js: 41229)
по адресу Authors.componentWillMount (bundle.js: 40504)
at callComponentWillMount (bundle.js: 26260)
at mountClassInstance (bundle.js: 26356)
at updateClassComponent (bundle.js: 27725)
at beginWork (bundle.js: 28366)
at executeUnitOfWork (bundle.js: 31198)
в workLoop (bundle.js: 31227)
at HTMLUnknownElement.callCallback (bundle.js: 19504)
at Object.invokeGuardedCallbackDev (bundle.js: 19542)

Вот мой код:

"use strict";

import AppDispatcher from '../dispatcher/AppDispatcher';
import ActionTypes from '../constants/actionTypes';
import { EventEmitter } from 'events';
import assign from 'object-assign';
import _ from 'lodash';

var CHANGE_EVENT = 'change';
var _author = [];

var AuthorStore = assign({}, EventEmitter.protoType, {
  addChangeListener(callback) {
    this.on(CHANGE_EVENT, callback);
  },
  removeChangeListener(callback) {
    this.removeListener(CHANGE_EVENT, callback);
  },
  emitChange() {
    this.emit;
  },
  getAllAuthors() {
    return _author;
  },
  getAuthorById(id) {
    return _.find(_author, {
      id: id
    });
  }
});

AppDispatcher.register(function(action) {
  switch (action.actionType) {
    case ActionTypes.INITIALIZE:
      _author = action.initialData.authors;
      AuthorStore.emitChange();
      break;
    case ActionTypes.UPDATE_AUTHOR:
      var existingAuthor = _.find(_author, {
        id: action.author.id
      });
      var existingAuthorIndex = _.indexOf(_author, existingAuthor);
      _author.splice(existingAuthorIndex, 1, action.author);
      AuthorStore.emitChange();
      break;
    case ActionTypes.CREATE_AUTHOR:
      _author.push(action.author);
      AuthorStore.emitChange();
      break;
    case ActionTypes.DELETE_AUTHOR:
      _.remove(_author, function(author) {
        return action.id === author.id;
      });
      AuthorStore.emitChange();
      break;
    default:

  }
});

export default AuthorStore;

Я не могу понять, почему это не работает, я ссылаюсь на эту документацию . Спасибо.

...