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)
在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。 谢谢。