2017-08-03 29 views
0

我有一個使用Redux和Redux Saga的React Native應用程序。我還使用了Ignite啓動器中的一個模式,我也在其他許多地方看到過這種模式,其中狀態有一個「isFetching」標誌和一個「錯誤」屬性來表示何時發生API調用和錯誤這是由API調用引起的。在React,Redux和Redux Saga應用程序中的組件間共享錯誤和獲取

我已閱讀過幾個地方,建議按域或功能分割您的Redux商店。我還讀到,在組件和Redux文件之間建立1:1關係通常不是一個好主意。

現在,假設我的應用程序中有幾個屏幕可以進行付款或管理信用卡。所以在我的情況下,我認爲「付款」可能是一個很好的領域。例如,也許我可以在屏幕A上使用信用卡付款,然後在屏幕B上添加一張新的信用卡。我有兩個傳說來處理這個問題:一個getCards傳奇和makePayment傳奇。它們都有相應的「請求」操作,其中isFetching標誌設置爲true。從那裏,他們各自進行幾次API調用,轉換數據等,然後用新數據更新PaymentRedux狀態。完成後,他們將isFetching標誌更新爲false。如果發生錯誤,他們用適當的錯誤類型更新狀態。

但是,如果一個屏幕的加載指示符或錯誤狀態確實與可能在另一個屏幕上啓動的結果相關聯?例如,如果我的付款由於某種原因在屏幕A上失敗,那麼我導航到屏幕B,我是否希望屏幕B知道屏幕A上發生的可能不相關的錯誤?

所以我的問題是:

  1. 這會是我的終極版狀態的合理分割在第一 的地方嗎?我應該像這樣在不同的屏幕上分享狀態嗎?
  2. 如何處理錯誤/ isFetching?我會有多個「isFetching」標誌,每個操作一個?每個屏幕是否只訂閱他們感興趣的特定錯誤類型?

只是想知道推薦的模式是什麼。建議將不勝感激。謝謝!

回答

0

我相信你的情況,最好將這個減速器分成兩部分,這樣你就可以有一個減速器和一個信用卡減速器。信用卡減價機構將負責有關添加,刪除和修改信用卡的所有數據,而減價機構將負責支付付款狀態,例如成功,訂單號碼和信用卡使用情況等。

這是非常主觀的,因爲在Redux中沒有正確的方法來做東西。如果你不覺得有兩個減速器是真的有必要,也許你可以在自身拆分支付減速,從而在相同的減速機有如下兩種狀態:

const INITIAL_STATE = { 
    payment: { 
    error: null, 
    fetching: false, 
    ... 
    }, 
    creditCards: { 
    error: null, 
    fetching: false 
    } 
} 

這樣,你只需要實現選擇器和動作處理程序根據你建模你的狀態的方式。

相關問題