2015-11-30 52 views
4

我正在使用來自Facebook的Flux,反應,ES6。如何等待另一家商店在一家商店發生的調度

我對這些單件店有不同的問題。然而,反覆出現的情況如下。我從一個組件派出一個動作,並且我有兩個商店(StoreA,StoreB)傾聽該動作。

我的兩個商店分別位於兩個不同的文件中,每個文件都導出單件商店實例。這兩個商店都已經導入到相關的容器中(一個React組件視圖)。我希望StoreA在StoreA開始處理之前等待StoreB完成處理當前分派。

我已經閱讀了文檔,並且有一個waitFor方法可以與調度程序的註冊方法返回的令牌一起使用。但是,我的兩家商店使用不同的文件。能不能找到一種方法來訪問從StoreA StoreB的派遣令牌......

換句話說:

ReactComp.js

... 
handleClick() { 
    dispatcher.dispatch({ 
     type: 'ACTION1' 
    }); 
} 

StoreA.js

class StoreA { 
    constructor() { 
     this.dispatchToken = dispatcher.register((action) => { 
      switch(action.type) { 
       case 'ACTION1': 
        // do something... 
        break; 
      } 
     }); 
    } 
} 

export default new StoreA(); 

StoreB.js

class StoreB { 
    constructor() { 
     dispatcher.register((action) => { 
      switch(action.type) { 
       case 'ACTION1': 
        dispatcher.waitFor([storeADispatchToken]); //how to get the dispatchToken from Store A... 
        break; 
      } 
     }); 
    } 
} 

export default new StoreB(); 

我是新來的反應和流量架構,答案可能是顯而易見的,如果是的話,但是,如果所有的時間都看起來沒有成功,我就會投注於此。

回答

1

將StoreA導入StoreB你應該可以參考令牌:

import StoreA from 'path/to/StoreA.js'; 
// or if you're not using es6 imports: 
// const StoreA = require('path/to/StoreA.js'); 

class StoreB { 
    constructor() { 
    dispatcher.register((action) => { 
     switch(action.type) { 
     case 'ACTION1': 
      dispatcher.waitFor([StoreA.dispatchToken]); 
      break; 
     } 
    }); 
    } 
} 

export default new StoreB(); 
+0

對不起,我沒有提到兩個存儲文件都已經導入到它們各自的組件文件中。如果我這樣做,如果我理解正確,我會複製StoreA的權利?我最終可能會使用之前在組件中使用的實例,以及我在StoreB中導入的實例。兩者都將聽取可能最終複製Ajax調用和其他邏輯的相同操作。 –

+0

如果我正確理解您的疑慮,答案是否定的 - 每個商店只有一個實例,因爲您正在從商店中導出實例文件,而不是類 - '''導出默認的新的StoreA();'' - 這是使用'new'這是關鍵。當從'path/to/StoreA''導入StoreA時,StoreB和任何使用StoreA的組件都將獲得相同的實例。 –

+0

是的,這是我的擔憂,但我有辦法繞過它嗎?對我來說,每個文件都有一個商店似乎是合乎邏輯的。但是因爲Flux是關於單件商店的,所以如果我的商店被導入到不同的文件中,我無法訪問這些調度令牌。我發現我的自我調度行爲在有效載荷中是相對商店的調動標記。不要認爲這是使用Flux模式的正確方法。如果我有一個文件stores.js,在文件中某處存在新的StoreA()和新的StoreB(),並導出默認的{storeA:StoreA,storeB:StoreB},會怎麼樣?感謝您的幫助btw! –

相關問題