Androidアプリ開発:ステートフルとステートレスコンポーザブルの理解

ステートフル コンポーザブル

ステートフルなコンポーザブルは、アプリケーションの動的な状態やデータを内部に保持するコンポーネントです。これにより、時間とともに変化するユーザーの入力や設定を反映できます。

例: ユーザーが入力するテキストフィールド。文字を入力するたびに、コンポーネントの状態が更新されます。

import androidx.compose.runtime.*
import androidx.compose.material.*
import androidx.compose.ui.tooling.preview.Preview

@Composable
fun StatefulTextField() {
    var text by remember { mutableStateOf("") }

    TextField(
        value = text,
        onValueChange = { text = it },
        label = { Text("Enter text") }
    )
}

@Preview
@Composable
fun PreviewStatefulTextField() {
    StatefulTextField()
}

ステートレス コンポーザブル

ステートレスなコンポーザブルは、状態を内部に持たず、外部から提供されたデータに基づいてUIを表示するだけのコンポーネントです。再利用が容易で、テストも簡単になります。

例: リスト表示コンポーネント。外部からデータを受け取り、リストを表示するのみで、自身ではデータを管理しません。

import androidx.compose.runtime.*
import androidx.compose.material.*
import androidx.compose.ui.tooling.preview.Preview

@Composable
fun StatelessTextField(text: String, onTextChange: (String) -> Unit) {
    TextField(
        value = text,
        onValueChange = onTextChange,
        label = { Text("Enter text") }
    )
}

@Composable
fun ParentComposable() {
    var text by remember { mutableStateOf("") }

    StatelessTextField(
        text = text,
        onTextChange = { text = it }
    )
}

@Preview
@Composable
fun PreviewParentComposable() {
    ParentComposable()
}


状態ホイスティング

状態ホイスティングは、ステートフルなコンポーネントからステートレスなコンポーネントへ状態を移動させるプロセスです。これにより、状態の共有や大規模なアプリケーションでの状態管理が効率的に行えるようになります。コンポーネントの再利用性と保守性が向上します。

この理解を深めることで、より効率的で保守しやすいアプリケーション開発が可能になります。

関連記事