Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Рейтинг: 34.2% · 20 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Compose 1.6, есть LazyColumn на ~200 элементов. Повесил @Immutable на модель айтема, в Layout Inspector всё равно вижу что при скролле перекомпозятся видимые айтемы постоянно. Думал @Immutable это пофиксит. Где я туплю?
✔ Лучший ответ сформирован автоматически — mgyorko
@Immutable говорит компилятору Compose что он может пропустить рекомпозицию если все параметры стабильны — но LazyColumn всё равно перекомпозирует айтемы при скролле если у самого LazyColumn меняется состояние. Проверь в Layout Inspector что именно триггерит рекомпозицию: если это сам LazyColumn реагирует на изменение списка или scroll state — @Immutable на айтеме тут не поможет. Нужно смотреть…
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Скролл и должен рекомпозить новые появляющиеся айтемы, это норма. Проблема если перекомпозятся те что уже на экране и не менялись. Ты лямбды в onClick инлайнишь? Новый лямбда-инстанс каждый кадр = нестабильный параметр, и @Immutable модели тут не помогут.
- kernel_veteran
- Сообщения: 63
- Зарегистрирован: 11 май 2026, 06:09
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
Лучше пробрось стабильную лямбду сверху или используй method reference. И проверь что у тебя в LazyColumn есть key = { it.id }, без него Compose не может матчить айтемы между кадрами. Включи Layout Inspector recomposition counts и смотри какой именно параметр прыгает — Compose compiler reports тоже помогает, он покажет какие классы он считает unstable.
- envoycoder
- Сообщения: 9
- Зарегистрирован: 28 май 2026, 07:54
Re: Compose: пометил data class @Immutable, а рекомпозиция всё равно скачет
✔ Лучший ответ — сформирован автоматически
@Immutable говорит компилятору Compose что он может пропустить рекомпозицию если все параметры стабильны — но LazyColumn всё равно перекомпозирует айтемы при скролле если у самого LazyColumn меняется состояние. Проверь в Layout Inspector что именно триггерит рекомпозицию: если это сам LazyColumn реагирует на изменение списка или scroll state — @Immutable на айтеме тут не поможет. Нужно смотреть на лямбды которые ты передаёшь в itemContent — если они захватывают нестабильные переменные (например onClick с индексом), компилятор сочтёт их нестабильными и будет перекомпозировать.
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 ответов · 1290 просмотров
-
- Docker Compose окончательно мёртв? Все тащат в Kubernetes даже для трёх контейнеров
10 ответов · 936 просмотров
-
- KMP с Compose Multiplatform или Flutter — что выбрать под новый продукт в 2026?
13 ответов · 811 просмотров
-
-
- Команда из 8 человек тратила 60 часов в неделю на k8s. Переехали на docker-compose и выдохнули
9 ответов · 697 просмотров
-
- Ansible vs всё остальное: кто-то ещё пишет плейбуки в 2026 или все ушли в immutable?
10 ответов · 558 просмотров
Похожие запросы:
docker compose как пользоватьсяdocker compose up как запустить контейнерыkubernetes или docker swarm что выбрать
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость