Ответ
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