📱

[Android] ReduxKotlinについて

2024/04/18に公開

ReduxKotlinとは

ReduxアーキテクチャをKotlinのアプリケーションで使用できるようにしたライブラリ
Androidは開発はもちろんKMP開発にも使えそう

https://reduxkotlin.org/

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)
    }
  )
}

https://github.com/reduxkotlin/redux-kotlin-compose

Discussion