我最近练习反应
我在公司项目中看到了一个代码:
const TestStore = assign({}, EventEmitter.prototype, {
emitReceiverList() {
this.emit(Constants.RECEIVER_CHANGE) ;
},
}) ;
//What is .dispatchToken
TestStore.dispatchToken = AppDispatcher.register(function eventHandlers(event) {
const action = event.action ;
switch(action.actionType) {
case Constants.DEV_SEARCH:
info = action.value ;
TestStore.emitReceiverList() ;
break ;
default:
break ;
}
}) ;
export default TestStore ;
我重构:
const TestStore = assign({}, EventEmitter.prototype, {
// emitReceiverList() {
// this.emit(Constants.RECEIVER_CHANGE) ;
// },
handleActions(action) {
const new_action = action.action;
switch(new_action.actionType) {
case Constants.DEV_SEARCH:
info = new_action.value ;
//emit directly
this.emit(Constants.RECEIVER_CHANGE) ;
break ;
default:
break ;
}
}
}) ;
AppDispatcher.register(TestStore.handleActions.bind(TestStore));
export default TestStore ;
它很好用,但我不确定是否有副作用 所以我想问一下TestStore.dispatchToken的含义是什么? 需要吗???
我谷歌并找到这个https://github.com/sasha-bichkov/Flux-app/blob/d3c318f7cc6f33c2a96d76774b85a13acb792879/assets/javascripts/stores/BookStore.js
let BookStore = assign({}, EventEmitter.prototype, {});
BookStore.dispatchToken = AppDispatcher.register(function(action) {
switch(action.type) {
default: break;
}
});
export default BookStore;
但我还是不知道它用于什么? 请指导我谢谢
答案 0 :(得分:0)
如果TestStore要求另一个商店(例如BookStore)完成更新其数据,那么您可以将此令牌与waitFor()一起使用,以保证商店已更新其数据。
AppDispatcher.waitFor([BookStore.dispatchToken]);