什么是dispatchToken在flux Store(Dispatcher.register)中的含义?

时间:2016-05-06 11:50:13

标签: reactjs flux

我最近练习反应

我在公司项目中看到了一个代码:

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;

但我还是不知道它用于什么? 请指导我谢谢

1 个答案:

答案 0 :(得分:0)

如果TestStore要求另一个商店(例如BookStore)完成更新其数据,那么您可以将此令牌与waitFor()一起使用,以保证商店已更新其数据。

 AppDispatcher.waitFor([BookStore.dispatchToken]);