2016-01-14 19 views
0

我有麻煩與反應,助焊劑...我們有一個應用程序,這是非常相似的新焊劑聊天的例子。我們有着名的錯誤「不能在調度中發送」。但是,在某些情況下,我們很難想出解決這個問題的好方法。呼叫行動,......不能在調度中間派遣?

我們的疑問與此相同:https://groups.google.com/forum/#!topic/reactjs/mVbO3H1rICw,但我無法很好地理解所採用的解決方案。據我瞭解,這不是一個非常優雅的解決方案。

以下是事件序列:

  1. 動作A派遣;

  2. 存儲更新它的內部狀態,併發出變更信息;

  3. 響應組件X接收到更改消息(通過偵聽器的回調)並更新其狀態(setState);

  4. 組件X呈現並且作爲新組件Y的一部分也被安裝。我們選擇組件(Y,Z等)以使用狀態信息進行渲染;

  5. 新組件Y需要顯示最初未加載的數據。因此,我們呼籲在分量Y的componentDidMount()調用一個動作B.

然後一個API,在操作B中的新的調度員,我們有這個調度錯誤。

如果您認爲我們的應用程序邏輯有一些問題,我可以帶一些實用的例子來說明爲什麼這種情況對我們來說很常見。任何關於重構這種「通量」的想法都非常受歡迎。

感謝您的幫助!

回答

0

我想你需要在啓動動作b之前使用調度程序中的waitFor令牌b(您是否正確使用flux npm模塊的調度程序?)。另外,你可以做的就是讓您的商店Ajax調用動作A的過程中如果youre總是需要從動作b的數據。

solution b would look like this in /* store.js */ 

Dispatcher.register(function(payload){ 
    switch payload.type { 
    case ACTION_A: 
     /* do your state logic */ 
     StoreDataAccessLayer.apiCall() 
    } 
} 

其中有一個數據訪問層類/對象,將ajax調用包裝到api中。使用商店的狀態作爲輸入,並從成功函數調用觸發器更改。這是我使用flux npm模塊時看到的原始解決方案,如果你不打算用waitFor

+0

嗨!我不想從店裏打電話來。 「在流量應用數據在一個方向流動」:https://facebook.github.io/flux/docs/overview.html – Dherik

+0

youre不去使用的行動,使該API調用。你將api移動到第一個動作的週期 – PhilVarg

+0

我的錯誤。我說過,因爲我們在調用API之後調度API結果(有效載荷),因爲有些組件正在監聽這個API調用。我們的解決方案類似:https://github.com/schempy/react-flux-api-calls。並且我不能從派遣行動A的所有API調用,因爲這個商店不知道什麼API調用將是必要的,因爲只有組件(Y,Z等)知道。我會舉兩個實例來說明問題。 – Dherik