Как разделить состояние списка товаров в Compose?

Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.

Короткий ответ

Что ответить на собеседовании

Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.

Подробный разбор

Ответ с пояснениями

Условие

Экран Compose показывает товары через LazyColumn и ProductItem. Сейчас каждая строка сама загружает цену из сети, а FAB напрямую меняет обычный MutableList. После добавления товара список иногда не обновляется, повторная композиция запускает новые запросы. Предложите рефакторинг.

Ответ

Перенесите загрузку и изменение списка в владельца состояния экрана. ProductItem должен получать готовые данные и callbacks, а FAB — отправлять событие добавления.

Владелец состояния, например ViewModel, публикует неизменяемый снимок списка вместе с состояниями loading/error. Сетевой слой работает через repository, а не из тела composable. LazyColumn получает элементы со стабильными ключами id; ProductItem отображает переданный товар. Изменения создают новый наблюдаемый state, поэтому обычная мутация незаметного MutableList больше не теряется. Побочные эффекты запускаются с контролируемым жизненным циклом, а не при каждом построении строки.

Источник: developer.android.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее