Post #17
99
Оптимизация Jetpack Compose и
Почему твой
Часто вижу на код-ревью такую конструкцию:
Вроде всё ок? Мы экономим рекомпозиции. Но есть нюанс, о котором забывают мидлы.
Если внутри блока
💡 Кейс из практики: Мы пытались трекать изменение обычного
Правило большого пальца: Используйте
#compose #performance #under_the_hood
👉@androidspb
derivedStateOfПочему твой
derivedStateOf не работает так, как ты думаешь? 🧐Часто вижу на код-ревью такую конструкцию:
val listState = rememberLazyListState()
val showButton by remember {
derivedStateOf { listState.firstVisibleItemIndex > 0 }
}
Вроде всё ок? Мы экономим рекомпозиции. Но есть нюанс, о котором забывают мидлы.
Если внутри блока
derivedStateOf вы обращаетесь к объекту, который не является State-объектом (или Snapshot-aware), магии не произойдет. Compose просто не узнает, что данные изменились, пока не случится рекомпозиция родителя по другой причине.💡 Кейс из практики: Мы пытались трекать изменение обычного
var поля внутри класса, который не был обернут в Stable. В итоге кнопка "Наверх" появлялась рандомно.Правило большого пальца: Используйте
derivedStateOf только когда вы хотите превратить часто меняющийся State (например, скролл пиксель-в-пиксель) в редко меняющийся State (булеан видимости). Если вы просто мапите State A в State B - derivedStateOf часто избыточен и добавляет оверхед на трекинг зависимостей.#compose #performance #under_the_hood
👉@androidspb
- 👍 1





