在帶有Mosby庫的MVI中,訪問流中減速器功能之外的狀態的最佳方式是什麼?例如,當您需要爲回收站加載下一頁時,您需要知道最後加載了哪個頁面。 (在樣本應用程序中的最後一頁被保存在裝載機但違背了一個國家POJO的全部目的)在MVI中的減速器功能之外訪問狀態
1
A
回答
2
有多種方法可以做到這一點,取決於你的分頁鏈接是如何構建的,你可能不完全需要參考私人的狀態。
例如,假設您可以通過數字訪問下一頁。所以http請求看起來像這樣:http://www.foo.com/feed?page=1
下一頁是http://www.foo.com/feed?page=2
依此類推。
那麼你基本上可以做這樣的事情:
Observable<Integer> nextPageIntent = intent(YourView::loadNextPageIntent)
.scan(1, (previousPage, ignored) -> previousPage + 1);
Observable<State> state = nextPageIntent.switchMap(page -> backend.loadPage(page).map(...))
.startWith(...)
.onErrorReturn(...);
因此,關鍵是要增加一些「反」。每當YourView::loadNextPageIntent
被觸發時,我們在.scan(1, (previousPage, ignored) -> previousPage + 1)
中增加page
一。因此,這基本上發出1, 2, 3, 4, 5, ...
,然後從您的後端加載相應的頁面。
BehaviorSubject<State> state = BehaviorSubject.createDefault(initialState);
state.switchMap(oldState ->
intent(YourView::loadNextPageIntent)
.switchMap(ignored -> backend.loadPage(oldState.nextPageUrl) // You can access oldState now
.map(...))
.startWith(...)
.onErrorReturn(...)
).subscribe(state);
subscribeViewState(state, YourView::render)
:
但是,如果你真的需要到以前的狀態的基準來決定下一個頁面的網址,你可以稍微不同使用的BehaviorSubject
代替.scan()
一個運營商這樣的(cretits Paco Estevez)型號的狀態減速
這裏的訣竅是你使用一個Subject來訂閱自己。基本上它與.scan()
操作員用來實現減速器非常相似,但是現在您可以參考舊狀態。
相關問題
- 1. 如何訪問其他reducer減速器的狀態減少
- 2. 訪問狀態從另一個減速器反應/ Redux
- 3. 朋友功能減速無法訪問功能聲明
- 4. AS3:功能之外的訪問變量
- 5. 訪問狀態從渲染功能
- 6. 如何在2個聯合減速器之間共享狀態?
- 7. 在兩個Redux減速器/狀態之間共享數據
- 8. @jit減速功能
- 9. Polymer 2.0功能之外的聚合物訪問功能
- 10. Ui路由器在狀態中訪問狀態的問題
- 11. 減速狀態更新
- 12. Hadoop減速器清理功能
- 13. 更新地圖功能中的計數器並減少訪問
- 14. 不能訪問該功能之外的ajax請求的響應
- 15. 你可以使用組合減速器組成深層狀態減速器嗎?
- 16. 在Redux子減速器中設置初始狀態
- 17. 添加一個對象數組以在減速器中狀態
- 18. 是否在這個減速器中改變狀態?
- 19. 如何在減速器狀態中添加和刪除項目
- 20. 添加功能,減速機
- 21. 以ref之外的其他方式訪問子組件狀態?
- 22. 將Redux減速器映射到狀態中的未知密鑰
- 23. 通在功能之外的功能
- 24. 不能訪問$ scope屬性AngularJS控制器之外的動畫功能
- 25. 如何在兩個或多個減速器之間共享只讀狀態
- 26. 減速機不知道我的狀態在反應減少
- 27. 角度控制器的屬性無法在其功能之外訪問
- 28. 訪問$ http.get結果在Angularjs外功能
- 29. 變量不能在成功函數之外訪問
- 30. 操縱地圖功能的陣列中的減速器