diff --git a/app/src/main/java/me/pavi2410/useCompose/app/screens/ExampleScreen.kt b/app/src/main/java/me/pavi2410/useCompose/app/screens/ExampleScreen.kt index d45909d..0fa20ae 100644 --- a/app/src/main/java/me/pavi2410/useCompose/app/screens/ExampleScreen.kt +++ b/app/src/main/java/me/pavi2410/useCompose/app/screens/ExampleScreen.kt @@ -10,6 +10,7 @@ sealed class ExampleScreen( ) { object Counter : ExampleScreen("counter", "Counter", { CounterExample() }) object Context : ExampleScreen("context", "Context", { ContextExample() }) + object Reducer : ExampleScreen("reducer", "Reducer", { ReducerExample() }) object Network : ExampleScreen("network", "Network", { NetworkExample() }) } @@ -17,5 +18,6 @@ val exampleScreens get() = listOf( ExampleScreen.Counter, ExampleScreen.Context, + ExampleScreen.Reducer, ExampleScreen.Network ) diff --git a/app/src/main/java/me/pavi2410/useCompose/app/screens/ReducerExample.kt b/app/src/main/java/me/pavi2410/useCompose/app/screens/ReducerExample.kt new file mode 100644 index 0000000..5ea075c --- /dev/null +++ b/app/src/main/java/me/pavi2410/useCompose/app/screens/ReducerExample.kt @@ -0,0 +1,37 @@ +package me.pavi2410.useCompose.app.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.material.Button +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import me.pavi2410.useCompose.react.useReducer + +data class MyState(val count: Int) +data class MyAction(val type: String) + +val initialState = MyState(0) + +@Composable +fun ReducerExample() { + Column { + val (state, dispatch) = useReducer(initialState) { state, action -> + when (action.type) { + "increment" -> state.copy(count = state.count + 1) + "decrement" -> state.copy(count = state.count - 1) + else -> throw Error() + } + } + + Text("Count: ${state.count}") + Button(onClick = { + dispatch(MyAction("increment")) + }) { + Text("+") + } + Button(onClick = { + dispatch(MyAction("decrement")) + }) { + Text("-") + } + } +} \ No newline at end of file