📱
[Android] ReduxKotlinについて
ReduxKotlinとは
ReduxアーキテクチャをKotlinのアプリケーションで使用できるようにしたライブラリ
Androidは開発はもちろんKMP開発にも使えそう
Reduxパターンとは
UDF(単方向データフロー)を実現するアーキテクチャ
原則
-
唯一の真実の情報源
- アプリケーション全体の状態は、単一ストア内のオブジェクト ツリーに保存される
-
状態は読み取り専用
- 状態を変更する唯一の方法は、何が起こったかを説明するオブジェクトであるactionを発行すること
-
変更は純粋な関数で行われる
- 状態ツリーがアクションによってどのように変換されるかを指定するには、純粋な レデューサーを作成する
要素
- Store
- アプリケーションの状態を保持する
- Action
- アプリケーションの状態を変更するための操作を表す
- dispach
- アクションを送信するためのメソッド
- State
- アプリケーションの現在の状態を表す、UIは、このstateの内容に基づいてレンダリングされる
- Reducer
- 現在の状態とアクションを受け取り、新しい状態を生成する純粋な関数
- MiddleWare
- アクションがディスパッチされてからリデューサーが実行されるまでの間に副作用を処理するための機能、非同期処理を行う
流れ
サンプルコード
data class State(val name: String? = null)
sealed interface Action {
data class Rename(val name: String) : Action
object ClearName : Action
}
val reducer: Reducer<State> = reducerForActionType<State, Action> { state, action ->
when (action) {
is Action.Rename -> state.copy(name = action.name)
is Action.ClearName -> state.copy(name = null)
}
}
@Composable
fun App() {
StoreProvider(createStore(reducer, State())) {
Component()
}
}
@Composable
fun Component() {
val name by selectState<State, String> { name }
val dispatch = rememberDispatcher()
Text(name)
Button(
text = "Clear",
onClick = {
dispatch(ClearName)
}
)
}
Discussion