[譯]使用MVI打造響應式APP(八):導航

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION
做者:Hannes Dorfmann
譯者:卻把清梅嗅android

上一篇博客中,咱們探討了協調模式是如何在Android中應用的。此次我想展現如何在Model-View-Intent中使用它。git

若是您還不知道協調器模式是什麼,我強烈建議您回過頭來閱讀上文內容github

MVI中應用此模式與MVVMMVP沒有太大區別:咱們將lambda做爲導航的回調傳遞給咱們的MviBasePresenter。有趣的是咱們如何在狀態驅動的架構中觸發這些回調?咱們來看一個具體的例子:架構

class FooPresenter(
  private var navigationCallback: ( () -> Unit )?
) : MviBasePresenter<FooView> {  
  lateinit var disposable : Disposable
  override fun bindIntents(){
    val intent1 = ...
    val intent2 = ...
    val intents = Observable.merge(intent1, intent2)

    val state = intents.switchMap { ... }

    // 這裏就是有趣的部分
    val sharedState = state.share()
    disposable = sharedState.filter{ state ->
      state is State.Foo
    }.subscribe { navigationCallback!!() }

    subscribeViewState(sharedState, FooView::render)
  }

  override fun unbindIntents(){
    disposable.dispose() // disposable 導航
    navigationCallback = null // 避免內存泄漏
  }
}
複製代碼

其思想是:經過RxJavashare() 操做符,咱們對一般用來對View層渲染狀態的Observable進行復用,再加上經過與 .filter() 操做符的組合使用,達到可以監聽到肯定的狀態,這以後,當咱們觀察到該狀態時,觸發對應的導航操做,而後協調器模式就像我以前的博客文章中描述的那樣進行工做。app


系列目錄

《使用MVI打造響應式APP》原文ide

《使用MVI打造響應式APP》譯文函數

《使用MVI打造響應式APP》實戰學習


關於我

Hello,我是卻把清梅嗅,若是您以爲文章對您有價值,歡迎 ❤️,也歡迎關注個人博客或者Githubui

若是您以爲文章還差了那麼點東西,也請經過關注督促我寫出更好的文章——萬一哪天我進步了呢?spa

相關文章
相關標籤/搜索