Comments (3)
Hello! Yes this might be a problem indeed. In such cases I suggest to use state instead. You can raise a flag in the state and when view will receive this it should first produce an event to dismiss this flag and then handle it. I understand that it is boilerplate but this is the proper way.
from mvikotlin.
Yes, I know this way. Honestly, I always considered the need to handle one-time events through state to be the main disadvantage of the MVI pattern. Probably this method is correct for maintaining a state in a consistent form, and also allows to save a state in local storage. But... if events are not so important and do not affect the rest of the state, writing this boilerplate seems unnecessary.
I heard your point of view, thanks :) Perhaps you are right, I will think about it.
from mvikotlin.
Yeah. If events are not so important it might be ok to miss them in such corner cases.
There is also a third (a bit hacky) way:
class OneOffValue<T: Any>(value: T) {
private var value: T? = value
fun get(): T? = value?.also { value = null }
}
data class MyState(
val error: OneOffValue<String>? = null
)
from mvikotlin.
Related Issues (20)
- Add watchOS support HOT 2
- Deploy JS sample app to hosting as working example HOT 1
- Memory leak using "LifecycleExt.kt" HOT 7
- Unit Testing the CalculatorStoreFactory (from the website tutorial)... ???
- Rename SuspendExecutor to CoroutineExecutor and SuspendBootstrapper to CoroutineBootstrapper HOT 1
- Can't export time travel data HOT 3
- BypassReducer does nothing HOT 2
- Support new Apple silicon targets
- Try to allow Stores with same names when using time travel
- Suggestion to improve API for CoroutineExecutor HOT 2
- Add settings dialog to the time travel IDEA plugin HOT 1
- Describe the time travel feature in more detail HOT 2
- Add binary-compatibility-validator plugin to all published modules
- Consider better names for Action and Result HOT 3
- TimeTravelServer for web HOT 1
- Broken links in the time travel docs HOT 1
- Setup CI for publishing the time travel desktop app HOT 1
- Update KDocs in CoroutineExecutor HOT 5
- How to work around bootstrapper action publishing label before listener set up HOT 5
- Mvi
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from mvikotlin.