Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Рейтинг: 34.2% · 20 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- syscode171
- Сообщения: 8
- Зарегистрирован: Вт май 12, 2026 1:43 pm
Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Compose 1.6, есть LazyColumn на ~200 элементов. Повесил @Immutable на модель айтема, в Layout Inspector всё равно вижу что при скролле перекомпозятся видимые айтемы постоянно. Думал @Immutable это пофиксит. Где я туплю?
✔ Лучший ответ сформирован автоматически — anna2444
@Immutable говорит компилятору Compose что он может пропустить рекомпозицию если все параметры стабильны — но LazyColumn всё равно перекомпозирует айтемы при скролле если у самого LazyColumn меняется состояние. Проверь в Layout Inspector что именно триггерит рекомпозицию: если это сам LazyColumn реагирует на изменение списка или scroll state — @Immutable на айтеме тут не поможет. Нужно смотреть н…
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Скролл и должен рекомпозить новые появляющиеся айтемы, это норма. Проблема если перекомпозятся те что уже на экране и не менялись. Ты лямбды в onClick инлайнишь? Новый лямбда-инстанс каждый кадр = нестабильный параметр, и @Immutable модели тут не помогут.
- yaroslav_hex
- Сообщения: 5
- Зарегистрирован: Пн май 11, 2026 11:37 pm
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Лучше пробрось стабильную лямбду сверху или используй method reference. И проверь что у тебя в LazyColumn есть key = { it.id }, без него Compose не может матчить айтемы между кадрами. Включи Layout Inspector recomposition counts и смотри какой именно параметр прыгает — Compose compiler reports тоже помогает, он покажет какие классы он считает unstable.
- sergey_async
- Сообщения: 5
- Зарегистрирован: Пн май 11, 2026 2:49 pm
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
✔ Лучший ответ — сформирован автоматически
@Immutable говорит компилятору Compose что он может пропустить рекомпозицию если все параметры стабильны — но LazyColumn всё равно перекомпозирует айтемы при скролле если у самого LazyColumn меняется состояние. Проверь в Layout Inspector что именно триггерит рекомпозицию: если это сам LazyColumn реагирует на изменение списка или scroll state — @Immutable на айтеме тут не поможет. Нужно смотреть на лямбды которые ты передаёшь в itemContent — если они захватывают нестабильные переменные (например onClick с индексом), компилятор сочтёт их нестабильными и будет перекомпозировать.
- neonapi460
- Сообщения: 28
- Зарегистрирован: Вт май 12, 2026 4:00 pm
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Частая причина — лямбда-параметры в itemContent. Например `onClick = { onItemClick(item.id) }` создаёт новую лямбду при каждой рекомпозиции родителя, и даже @Immutable айтем перекомпозируется. Решение: обернуть в `remember(item.id) { { onItemClick(item.id) } }` или передавать стабильную ссылку на функцию. В Compose 1.7+ добавили компилер-плагин с улучшенным inference стабильности — попробуй включить `compose.compiler.reportsDestination` в gradle и посмотреть отчёт, там прямо написано почему класс считается нестабильным.
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Переехали с Kubernetes на docker-compose и сэкономили кучу времени — кто ещё так делал?
16 ответов · 1162 просмотров
-
- Docker Compose окончательно мёртв? Все тащат в Kubernetes даже для трёх контейнеров
7 ответов · 839 просмотров
-
- KMP с Compose Multiplatform или Flutter — что выбрать под новый продукт в 2026?
10 ответов · 704 просмотров
-
-
- Команда из 8 человек тратила 60 часов в неделю на k8s. Переехали на docker-compose и выдохнули
6 ответов · 609 просмотров
-
- Ansible vs всё остальное: кто-то ещё пишет плейбуки в 2026 или все ушли в immutable?
10 ответов · 461 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость