Following a good React course from udemy, I used Reflux to create a store, however, the triggered event from the store can not be caught by the component.
My question: Why using ImageStore.orderImage(TODO 1 in the component.jsx) does not work: this.onChange will not be triggered, while both ImageStore.getImage and Actions.orderImage work.
Thanks for any help.
Inside component.jsx:
mixins: [
Reflux.listenTo(ImageStore,'onChange')
],
componentWillMount: function () {
//TODO 1: why ImageStore.orderImage does not work: this.onChange will not be triggered
// ImageStore.orderImage(this.props.params.id); // WHY this does not work? this.onChange will not be triggered.
// ImageStore.getImage(this.props.params.id); // this works
Actions.orderImage(this.props.params.id); // this works, will use this method
},
onChange: function () {
console.log("imageComponent: get a new event from imageStore");
this.setState({
image: ImageStore.findImage(this.props.params.id)
});
}
Inside store.jsx
listenables: [Actions],
getImage: function (imageID) {
API.get('gallery/image/'+imageID)
.then(function(json){
if(this.images){
this.images.push(json.data);
} else {
this.images = [json.data];
}
this.updateStore();
}.bind(this));
},
orderImage: function (imageID) {
console.log("imageStore: get a new image order:", imageID);
var image = _.findWhere(this.images, {id:imageID});
if (!image) {
this.getImage(imageID);
console.log("imageStore: I start to get image:", imageID);
}
else {
console.log("imageStore: I already have the image:", imageID);
this.trigger('change',this.images);
this.updateStore();
}
},
findImage: function (imageID) {
var image = _.findWhere(this.images, {id:imageID});
if (image) {
return image;
} else {
return null;
}
},
updateStore: function () {
console.log("imageStore: trigger the change");
this.trigger('change',this.images);
}