# Reactive Apps with Model-View-Intent - Part 3: State Reducer

DevFeed: [Reactive Apps with Model-View-Intent - Part 3: State Reducer](<https://devfeed.tech/articles/reactive-apps-with-model-view-intent-part-3-state-reducer-25456.md>)

Original publisher: [Read original article](<https://hannesdorfmann.com/android/mosby3-mvi-3/>)

Author: Hannes Dorfmann

Published: 2017-01-19T09:00:00Z

Content type: tutorial

Language: en

Sources: [Hannes Dorfmann](<https://devfeed.tech/sources/hannes-dorfmann.md>)

Topics: [reactive](<https://devfeed.tech/topics/reactive.md>), [App](<https://devfeed.tech/topics/app.md>), [Code](<https://devfeed.tech/topics/code.md>), [ui](<https://devfeed.tech/topics/ui.md>), [implementation](<https://devfeed.tech/topics/implementation.md>)

Tags: [3](<https://devfeed.tech/tags/3.md>), [apps](<https://devfeed.tech/tags/apps.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blog-post](<https://devfeed.tech/tags/blog-post.md>), [build](<https://devfeed.tech/tags/build.md>), [code](<https://devfeed.tech/tags/code.md>), [component](<https://devfeed.tech/tags/component.md>), [data](<https://devfeed.tech/tags/data.md>), [flow](<https://devfeed.tech/tags/flow.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [implement](<https://devfeed.tech/tags/implement.md>), [interface](<https://devfeed.tech/tags/interface.md>), [load](<https://devfeed.tech/tags/load.md>), [merge](<https://devfeed.tech/tags/merge.md>), [model](<https://devfeed.tech/tags/model.md>), [model-view-intent](<https://devfeed.tech/tags/model-view-intent.md>), [mvi](<https://devfeed.tech/tags/mvi.md>), [reactive](<https://devfeed.tech/tags/reactive.md>), [screen](<https://devfeed.tech/tags/screen.md>), [state](<https://devfeed.tech/tags/state.md>)

## AI overview

Part 3 of a tutorial on Reactive Apps with Model-View-Intent explains how to build a more complex MVI screen using a state reducer and unidirectional data flow. The example includes categorized product lists, loading more items, pull-to-refresh, pagination, concurrent actions, failures, and presenter logic.

## Source excerpt

In the previous part we have discussed how to implement a simple screen with the Model-View-Intent pattern with an unidirectional data flow. In this blog post we are going to build a more complex screen with MVI with the help of a state reducer. If you haven't read part 2 yet, you should read that before continue with this blog post, because there is described how we connect the View via Presenter with the business logic and how data flows unidirectional.