Работал ли с CompositionLocal

«Работал ли с CompositionLocal» — вопрос из категории Jetpack Compose, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CompositionLocal — это механизм в Jetpack Compose для передачи данных через дерево композиции без явной передачи параметров. Полезен для темы, локализации и других глобальных значений.

Пример:

val LocalTextStyle = compositionLocalOf { TextStyle.Default }

@Composable
fun App() {
    CompositionLocalProvider(LocalTextStyle provides TextStyle(fontSize = 24.sp)) {
        ChildComponent() // получит стиль без явной передачи
    }
}

@Composable
fun ChildComponent() {
    val textStyle = LocalTextStyle.current // доступ к значению
    Text("Hello", style = textStyle)
}

Ключевые моменты:

  • Используйте для данных, которые редко меняются
  • Избегайте злоупотребления — может усложнить понимание потока данных
  • Альтернатива — передача через параметры или DI