我在寫一個React(實際上是React Native)應用程序,它在本地存儲數據並將其提交到後端進行處理。更具體地說,它允許用戶下訂單產品,並且如果由於例如用戶當前未登錄而提交失敗,則數據必須被存儲並且稍後被重新提交到後端。異步處理不影響React + Flux視圖的數據
該應用程序使用Flux數據流構建。我讀過很多關於流量,但我仍然不知道如何處理這種情況:
- 用戶下訂單:一個陣營組件調用一個動作造物主方法,並傳入訂單數據
- 行動造物主異步提交訂單到後端
- 的訂單提交失敗(例如,因爲用戶已經尚未登錄)
- 該錯誤是固定的(例如,在用戶登錄)
- 的數據必須是自動重新提交到後端
數據在#3-5步驟之間存在什麼位置?我可以想出兩種可能的方法來處理這個問題,但我不確定哪一種方法是正確的,根據Flux。以下是第一條:
- Action Creator創建ORDER_SUBMIT_FAILED操作並將訂單數據附加到該操作。
- 訂單商店接收該操作並將訂單存儲在「掛單」列表中。
- 用戶登錄,並生成LOGIN_SUCCESS操作。
- 訂單商店也會收到此操作,並重新提交「掛單」。
但我不明白Order Store如何重新向網絡提交數據。根據Should flux stores, or actions (or both) touch external services?,我的商店是啞數據存儲庫,所有網絡活動都發生在Action Creators中。商店是否應該將數據傳回給Action Creator?但是這似乎違反了Flux。
另一種是:
- 行動造物主加載登錄屏幕,並將其傳遞一個回調。
- 登錄屏幕處理登錄過程,成功完成後調用回調。
- 回調(進入Action Creator)允許它重新提交失敗的訂單。
但是使用回調函數似乎也不像通量一樣。
React/Flux way to handle permission sensitive actions with login flows討論了類似的情況,但重點在於如何首先檢查登錄。接受的答案建議遵循上面提出的第一個流程,但不回答我在那裏提出的問題。
謝謝!
回覆:「從那裏發送到後端,發生第二次異步操作」:在我的情況下,我更喜歡Store不知道後端的任何信息。這不是一條硬性規定,但我更喜歡這樣做。 (你可以閱讀更多關於爲什麼在http://stackoverflow.com/questions/25630611/should-flux-stores-or-actions-or-both-touch-external-services/25648726#25648726。)此外,重新:「然後,您可以......檢查您的商店是否需要重新發送商品,然後再次生成適當的同步操作「,這會發生在何處?謝謝! –
我實際上使用的是Reflux,它從智能商店/愚蠢行動的角度來看待更多東西。我對級聯操作有點不確定,但是還沒有找到更好的方法。直接在商店上調用函數可能導致完全依賴混亂。 開放式重新提交的檢查將再次發生在收聽「重新連接」或任何操作併發出同步操作的商店中。 –