我有一个Reflux商店,在触发操作时似乎会导致错误:
var taskStore = Reflux.createStore({
listenables: [taskActions],
init: function(){
this.tasks = [];
this.index = {};
this.trigger(this.tasks);
},
onLoad: function(arr){
var idx = {}
arr.forEach(function(ele){
idx[ele.id] = ele
});
this.tasks = arr;
this.index = idx;
this.trigger(arr);
}
});
当调用操作load
并触发onLoad
方法时,它会导致this.trigger
方法失败,Chrome会说错误为未捕获TypeError:无法读取属性'apply '未定义
调用堆栈最终让我进入了Reflux listen方法:
listen: function(callback, bindContext) {
bindContext = bindContext || this;
var eventHandler = function(args) {
callback.apply(bindContext, args);
}, me = this;
this.emitter.addListener(this.eventLabel, eventHandler);
return function() {
me.emitter.removeListener(me.eventLabel, eventHandler);
};
},
这是callback.apply中的回调,但看起来回调由于某种原因未定义。
我显然做错了什么来触发如此严重的错误,但我不知道是什么。有人能告诉我,我在商店里做错了什么吗?
调用商店的代码会像这样调用它:
var App = React.createClass({
mixins: [
Reflux.connect(taskStore,"tasks"),
Reflux.connect(taskIndex, "index"),
],
...
答案 0 :(得分:3)
我遇到了同样的问题。在我的情况下,在声明组件时是我的错:
global.FilmList = React.createClass({
mixins: [Reflux.connect(filmListStore, "list")],
componentDidMount: function() {
this.listenTo(filmListStore, this.eventChange);
},
render: function() {
我设置了mixins和this.listenTo()方法。我删除了this.listenTo(),这解决了问题
答案 1 :(得分:2)
我花了一个小时试图自己解决这个问题。
在我的情况下,我告诉Reflux.ListenTo触发的方法不存在。
所以我有
Reflux.listenTo('FooStore', 'onUserDeleted')
我在商店里没有onUserDeleted:function(){}。