Compose · 1 / 3

Основы Compose

Composable-функции, состояние, рекомпозиция, модификаторы

Compose описывает интерфейс через composable-функции. Изменение наблюдаемого состояния может инвалидировать читающий его участок; рекомпозиция повторно выполняет соответствующую часть композиции. Чтение состояния в layout или drawing может потребовать только эту фазу, без рекомпозиции. Фазы Compose.

Состояние

import androidx.compose.foundation.layout.Column
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue

@Composable
fun Greeting() {
    var name by remember { mutableStateOf("") }
    Column {
        TextField(value = name, onValueChange = { name = it })
        Text("Привет, $name")
    }
}

mutableStateOf создаёт наблюдаемое значение; при стандартной политике запись равного по == значения не считается изменением. remember удерживает значение в позиции композиции до выхода или изменения ключей. Для сохранения небольшого UI state через пересоздание Activity используют rememberSaveable, с ограничениями saved state. State, сохранение.

State hoisting

Компонент получает value и onValueChange, а владелец хранит состояние. Выбирайте ближайшего общего владельца для читателей и писателей; это не всегда ViewModel. Один источник значения предотвращает расхождение локальной и внешней копий. State hoisting.

Модификаторы

Modifier.padding(16.dp).background(Color.Red) размещает padding вне цветной области; обратный порядок включает отступ в фон. Положение clickable также определяет область взаимодействия. Порядок Modifier.

Побочные эффекты

Запуск корутин и подписок требует effect API. LaunchedEffect(key) отменяется и перезапускается при смене ключа, отменяется при выходе из композиции. Постоянный ключ означает один запуск на вхождение, а не один запуск за жизнь приложения. Effects.

Strong skipping включён по умолчанию с Kotlin 2.0.20: restartable-функции могут пропускаться и с unstable-параметрами. Это не делает List стабильным и не превращает мутацию обычного списка в наблюдаемое изменение. Strong skipping, stability contract.

К вопросам →