Рубрика: Compose
-
Что такое Recomposition Scope и Smart Recomposition. Как Compose понимает, какие composables перерисовать?
Что такое Recomposition Scope Если вкратце, то Recomposition Scope — это кусок дерева композиции, который может быть перекомпозирован отдельно от остальных. На практике это обычно тело одной @Composable функции, тело лямбды (content = { … }), группа под key { … }, remember {}, LaunchedEffect {}, и т.п. Внутри рантайма Composer строит дерево групп (composition…
-
Как работает Side-Effect API? Разница между LaunchedEffect, DisposableEffect, SideEffect?
Идеология Compose такова что @Composable-функции должны быть «чистыми», то есть «меняется состояние => меняется UI». И ничего постороннего. Но в реальной жизни нужно логировать, дергать API, запускать корутины, подписываться на коллбеки и т.д. Для этого Compose даёт специальные эффекты, которые жёстко привязаны к жизненному циклу композиции, не ломают рекомпозицию и дают понятные точки: входа/обновления/выхода из…
-
Когда и почему нужно использовать key в LazyColumn/LazyRow? Что будет, если не использовать?
Если коротко, то key в LazyColumn/LazyRow нужен, чтобы Compose понимал, какой элемент списка “кто есть кто” при вставках/удалениях/перестановках.Без правильных ключей начинают прыгать remember-состояния, анимации, фокус и т.п. Что делает key в LazyColumn/LazyRow key — это уникальный идентификатор элемента в пределах списка. Compose использует его, чтобы: Ключ должен быть: Идеальный кандидатом может быть id из модели…
-
Как работает State и MutableState под капотом? Что такое Snapshot Mutation Policy?
В Compose State<T> — это наблюдаемый контейнер значения. Обратите внимание на слова «наблюдаемый«, «контейнер«, «значения«) Они очень важны. Есть разные реализации (SnapshotMutableStateImpl, DerivedState, и т.п.), но на уровне API идея простая: Snapshot system: как это работает под капотом Snapshot — основа всей реактивности Compose Compose использует систему снапшотов (Snapshot system). Это своего рода STM (software…
-
В чём разница между remember и rememberSaveable? Когда использовать каждый?
Что делает remember remember хранит значение внутри композиции (в slot table), живёт, пока компонент находится в Composition и переживает рекомпозиции. Но значение теряется, когда: Composable вышел из дерева (ветка if выключилась, сменился экран и т.п.) или Activity/Process был уничтожен (например, поворот экрана). remember как бы говорит компилятору «помни, пока этот кусок UI живёт». Что делает…
-
Что такое State Hoisting? Почему это ключевая практика в Compose?
State hoisting в Compose — это просто поднятие состояния наверх по дереву, из дочернего @Composable в его родителя. Формула очень простая: Компонент не хранит state, а получает его «сверху» и сообщает о изменениях «наверх». И это одна из ключевых практик в Compose, потому что она обеспечивает один источник истины, повторное использование, тестируемость и предсказуемость UI.…
-
Объясни жизненный цикл Composable-функции. Когда происходит initial composition, recomposition, когда функция уходит из композиции?
Давайте разложим это без магии: у любой @Composable по сути три состояния жизни: Compose-рантайм не даёт onCreate/onDestroy, но даёт правила, по которым вызывается код и срабатывают эффекты. 1. Initial composition — первый заход функции в композицию Когда происходит: Что реально происходит при initial composition: 2. Recomposition — повторный вызов функции при изменении состояния Когда происходит:…
-
Что такое Composable-функция? Какие правила работы у неё есть?
@Composable‑функция — это специальная функция в Jetpack Compose, предназначенная для декларативного описания UI. Это функция, которая: Что делает @Composable? Основные правила и ограничения Правило Объяснение Обязательная аннотация @Composable Без неё функция не участвует в рекомпозиции и не может вызывать другие composable Имя с заглавной буквы (PascalCase) Не обязательно, но рекомендуется (Google style guide) Нет возвращаемого…
-
В чём принципиальное отличие Jetpack Compose от View-системы? Как работает рекомпозиция?
Jetpack Compose — это декларативная UI-система, принципиально отличающаяся от императивной View-системы Android. Это не просто замена TextView на Text() — это полностью другой способ мышления и рендеринга UI. Главное отличие это «Декларативность» Compose как бы говорит: «Если у тебя новый state, то перерисуй UI так, чтобы он соответствовал ему. Не важно, что было раньше.» Принципиальные…