ステートフル コンポーザブル
ステートフルなコンポーザブルは、アプリケーションの動的な状態やデータを内部に保持するコンポーネントです。これにより、時間とともに変化するユーザーの入力や設定を反映できます。
例: ユーザーが入力するテキストフィールド。文字を入力するたびに、コンポーネントの状態が更新されます。
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()
}
状態ホイスティング
状態ホイスティングは、ステートフルなコンポーネントからステートレスなコンポーネントへ状態を移動させるプロセスです。これにより、状態の共有や大規模なアプリケーションでの状態管理が効率的に行えるようになります。コンポーネントの再利用性と保守性が向上します。
この理解を深めることで、より効率的で保守しやすいアプリケーション開発が可能になります。