Изменено: 02.06.2026
В проекте Decompose используется как слой навигации и жизненного цикла компонентов. React отвечает за отрисовку, а Decompose управляет структурой экранов и их состоянием.
Хороший пример можно посмотреть в TransactionsComponent.
Там используются:
ComponentContextSlotNavigation<Unit>childSlot(...)ChildSlot<Unit, FiltersComponent>asJsSlot()
ComponentContext
-> Feature Component
-> Child Stack / Child Slot
-> Nested Component
-> JS wrapper
-> React UI
То есть React получает уже готовые компоненты и навигационное состояние, а не строит дерево экранов самостоятельно.
Фильтры открываются через отдельный ChildSlot.
TransactionsComponent
-> FiltersComponent
Открытие выглядит примерно так:
setIsFiltersOpen(true)
-> filtersSlotNavigation.activate(Unit)
-> pushUrlSegment("filters")
Закрытие работает в обратную сторону:
setIsFiltersOpen(false)
-> filtersSlotNavigation.dismiss()
-> popUrlSegment("filters")
Из-за этого состояние навигации остаётся внутри Kotlin-кода и может синхронизироваться с URL браузера.
Большинство компонентов в проекте выполняют одинаковый набор задач:
- держат
ComponentContext; - экспортируют состояние в JavaScript;
- принимают intents от React;
- создают дочерние компоненты;
- связывают навигацию и MVI-контейнер.