[译]使用MVI打造响应式APP(八):导航

原文:REACTIVE APPS WITH MODEL-VIEW-INTENT - PART 8 - NAVIGATION
作者:Hannes Dorfmann
译者:却把清梅嗅

在上一篇博客中,我们探讨了协调模式是如何在Android中应用的。这次我想展示如何在Model-View-Intent中使用它。

如果您还不知道协调器模式是什么,我强烈建议您回过头来阅读上文内容。

MVI中应用此模式与MVVMMVP没有太大区别:我们将lambda作为导航的回调传递给我们的MviBasePresenter。有趣的是我们如何在状态驱动的架构中触发这些回调?我们来看一个具体的例子:

class FooPresenter(
  private var navigationCallback: ( () -> Unit )?
) : MviBasePresenter {  
  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() 操作符的组合使用,达到能够监听到确定的状态,这之后,当我们观察到该状态时,触发对应的导航操作,然后协调器模式就像我之前的博客文章中描述的那样进行工作。


系列目录

《使用MVI打造响应式APP》原文

  • Part 1: Model
  • Part 2: View and Intent
  • Part 3: State Reducer
  • Part 4: Independent UI Components
  • Part 5: Debugging with ease
  • Part 6: Restoring State
  • Part 7: Timing (SingleLiveEvent problem)
  • Part 8: In-App Navigation

《使用MVI打造响应式APP》译文

  • [译]使用MVI打造响应式APP(一):Model到底是什么
  • [译]使用MVI打造响应式APP[二]:View层和Intent层
  • [译]使用MVI打造响应式APP[三]:状态折叠器
  • [译]使用MVI打造响应式APP[四]:独立性UI组件
  • [译]使用MVI打造响应式APP[五]:轻而易举地Debug
  • [译]使用MVI打造响应式APP[六]:恢复状态
  • [译]使用MVI打造响应式APP[七]:掌握时机(SingleLiveEvent问题)
  • [译]使用MVI打造响应式APP[八]:导航

《使用MVI打造响应式APP》实战

  • 实战:使用MVI打造响应式&函数式的Github客户端

关于我

Hello,我是却把清梅嗅,如果您觉得文章对您有价值,欢迎 ❤️,也欢迎关注我的博客或者Github。

如果您觉得文章还差了那么点东西,也请通过关注督促我写出更好的文章——万一哪天我进步了呢?

  • 我的Android学习体系
  • 关于文章纠错
  • 关于知识付费

你可能感兴趣的:([译]使用MVI打造响应式APP(八):导航)