在reactjs中的EventEmitter.prototype,this.on不工作,并说它不是一个函数

时间:2018-05-06 15:00:46

标签: javascript reactjs events eventemitter

this.on('change', callback);

this.removeListener('change', callback);

不适用于我的addChangeListenerremoveChangeListener。我已导入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)
          在mountClassInstance(bundle.js:26356)
          在updateClassComponent(bundle.js:27725)
          在beginWork(bundle.js:28366)
          at performUnitOfWork(bundle.js:31198)
          at workLoop(bundle.js:31227)
          在HTMLUnknownElement.callCallback(bundle.js:19504)
          在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;

我无法弄清楚为什么它不起作用,我一直在指这个documentation。 谢谢。

0 个答案:

没有答案