在EffectHandler上,变形金刚,使用者,动作和功能之间有什么区别?我看到in the docs支持4种类型:
ObservableTransformer<Effect, Event> rxEffectHandler =
RxMobius.<Effect, Event>subtypeEffectHandler()
// Effect Handlers can be an ObservableTransformer
.addTransformer(Effect.SearchRequest.class, this::handleSearchRequest)
// They can also be a Consumer<F> (eg. Consumer<ShowErrorMessage>)
.addConsumer(Effect.ShowErrorMessage.class, view::showErrorMessage, AndroidSchedulers.mainThread())
// Or an Action
.addAction(Effect.SomethingElse.class, this::handleSomethingElse)
// Or a Function<F, E> (eg. Function<SaveToDb, Event>)
.addFunction(Effect.SaveToDb.class, this::handleSavingToDb)
.build();
要使用哪个?也许我缺少一些需要首先阅读的RxBackground?
答案 0 :(得分:1)
每个类型的签名都会给您一个提示,但是粗略的总结是:
-使用者F -> ()
:获取效果对象作为参数,并调用某些东西作为效果。示例:Toast.makeText(context, effect.message(), duration).show();
操作() -> ()
:与使用者相同,但是您不需要效果对象中的任何东西。示例:context.startActivity(new Intent(MyActivity.class))
功能F -> E
:阻止从效果到新事件的转换。如果您确切知道将要发出一个事件,并且可以安全地将其作为阻塞调用来使用,则可以使用它。示例:return Event.lookupResult(repository.get(effect.key()))
Transformer Observable<F> -> Observable<E>
:最强大的API,一个完整的rx,可以执行任何操作以将效果流转换为事件流,包括每个效果发出多个事件,甚至不发出事件首先收到效果。示例:effects.flatMap(effect -> return loadData(effect.uri())).map(Event::dataLoaded)
(已编辑)
答案 1 :(得分:0)
这是每个方法的工作原理,
╔═════════════╤════════════════════╤═════════════════════╗
║ Type │ Receives effect? │ Can produce events? ║
╠═════════════╪════════════════════╪═════════════════════╣
║ Action │ No │ No ║
║ Consumer │ Yes │ No ║
║ Transformer │ Yes │ Yes ║
╚═════════════╧════════════════════╧═════════════════════╝