Jetpack Compose. Side Effects. Как управлять логикой в Compose? [Ru, Kotlin\Android]

IT как новый космос: этой теме будет посвящена конференция YaTalks которая пройдёт 3-4 декабря в онлайн-формате. Участие доступно бесплатно для всех желающих.
Ссылка на регистрацию: clck.ru/YsJVg
Переходи и регистрируйся - будет интересно!
Всем привет, сегодня мы продолжим разбирать Jetpack Compose и сегодня мы доберемся до side effects. Side Effects помогают запускать корутины, управлять логикой в Compose и делать сложные композиционные штуки.
Если видео вам было полезно, пожалуйста, поделитесь им с друзьями
Тайм-коды:
00:00:00 - Вступление
00:01:29 - Вводная часть
00:12:01 - LaunchedEffect
00:29:26 - DisposableEffect
00:36:17 - SideEffect
00:38:45 - ProducedState
00:42:39 - DerivedState
00:49:47 - SnapshotFlow
00:51:39 - Заключительная часть
Ссылка на репозиторий:
github.com/AlexGladkov/Jetpac...
Напоминаю, что видео вначале выходят для моих патронов и спонсоров. Стать им можно по ссылке ниже
===========================================
Подписаться на boosty
boosty.to/mobiledev
Стать Патроном канала и получить доступ к уникальному материалу
/ mobiledeveloper
===========================================
Полезные статьи из мира мобильной разработки
Яндекс.Дзен - zen.yandex.ru/id/5e4aa0a9f2b9...
Teletype - teletype.in/@alexgladkov
Мобильный разработчик в других соц. сетях
=======================
Вконтакте - mdeveloper
Instagram - / nplau
Телеграм - t.me/mobiledevnews
=======================
Ставь лайк и расскажи друзьям, чтобы они тоже попробовали эту технологию

Пікірлер: 42

  • @user-jo7yt3ht2d
    @user-jo7yt3ht2d2 жыл бұрын

    Спасибо за видео. Чем больше будет таких видео, тем быстрее будет продвигаться композ в командах) Не согласен с тем что просто можно просто взять и как в первой части видео использовать rememberCoroutineScope и остальные сайд эффекты, и этим избавится от вью модели. Вью модель в первую очередь была создана гуглом для пережития изменения конфигураций. При пересоздании активити ввиду изменения конфигурации текущий композишн диспозится и например при повороте экрана все эти эффекты вызовутся заново. Тот же LaunchedEffect вне зависимости от ключа при изменении конфигурации просто вызовет лямбду внутри. При уходе с экрана и попадании его в бекстек только saveable состояние сохранится, кроме того все корутины запущенные с помощью coroutine scope созданного с помощью rememberCoroutineScope будут отменены. Написание бизнес логики в композабл функции в целом только добавляет сложности, слишком много граблей на которые можно наступить не учитывая работу композа. При этом тестировать эту бизнес логику сложнее. Мое личное мнение: Все сайд эффекты и корутин скоупы нужно использовать только для поддержки ui дерева, анимаций и отправки в бизнес логику событий при наступлении какого-то состояния ui или создания простеньких ui элементов, которые могут изменять свое состояние только пока они находятся на экране. Для экранов же необходим объект бизнес логики, который может жить вне рамок композиции, а в рамках нахождения экрана в бекстеке.

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Я еще сам не тестил, но есть гипотеза, что если запровайдить configurationChange в манифесте, то активити пересоздаваться не будет, при этом перерисовка все равно будет происходить, потому что компоуз. Но надо проверить

  • @user-jo7yt3ht2d

    @user-jo7yt3ht2d

    2 жыл бұрын

    @@MobileDeveloper Дело даже не в повороте экрана.Это был пример изменения конфигурации, которых больше чем одна. Если бы изменения в манифесте был тру вей хендлинга смены конфигураций никто бы сейчас не использовал вью модели, можно было бы просто создавать любой класс внутри фрагмента/активити и не парится со всеми этими созданиями фабрик для вью моделей. Кроме этого все равно остаётся сброс состояния при замещении экрана и попадании в бекстек, который конечно фиксится сохранением всего состояния через saveable механизм, но не очень удобно. Однако отмена всех корутин в скоупе композабла экрана после попадания в бекстек экрана и привязка времени жизни бизнес логики к ui композа уже проблема для некоторых кейсов, с этим можно жить, но не очень хочется.

  • @veygard
    @veygard2 жыл бұрын

    Спасибо за видео!

  • @NickTitovDev
    @NickTitovDev Жыл бұрын

    Спасибо за видео. Интересна задумка отказа от view model

  • @deadchannal
    @deadchannal2 жыл бұрын

    Ого! Очень актуально! Спасибо

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    👍👍

  • @YanchenkOFF
    @YanchenkOFF2 жыл бұрын

    Круто!

  • @sovrinfo
    @sovrinfo2 жыл бұрын

    Спасибо за видео.Коммент в поддержку!

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Спасибо )

  • @hedinnoviybog9522
    @hedinnoviybog95222 жыл бұрын

    Лекции супер!)

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Спасибо )

  • @holoceo
    @holoceo Жыл бұрын

    Вот вам derivedStateOf, но хз что он делает и зачем нужен. Лол) А так хорошее видео, спасибо.

  • @karamba6936
    @karamba6936 Жыл бұрын

    небольшая поправка - сайд эффекты это проблемы, возникающие в компоуз среде при использовании обычного кода(объявлении переменных, корутин скоупа и прочего). А вот эффект хэндлеры призваны решить эти проблемы

  • @user-xx3nd6et9e
    @user-xx3nd6et9e Жыл бұрын

    Мне кажется это противоречит самому подходу композа, идея в том что за логику отвечают модели, они ходят в сеть, пишут в базу и прочее и меняют Стейт,а композ просто подписывается на изменения , а смешивать их в одно месево то получится куча не читаемого и не поддерживаемого кода.

  • @mikeshilovski1512
    @mikeshilovski15122 жыл бұрын

    мне кажется наоборот джунам все проще и проще входить теперь будет, когда все переходит на более декларативный подход. А математика это круто, но далеко не основное сейчас

  • @user-eh9qg5tu3h
    @user-eh9qg5tu3h10 ай бұрын

    блин, ну revert же есть :) много написал, просто ревертни, проект-то под VCS у тебя :)

  • @nefedov-dima
    @nefedov-dima2 жыл бұрын

    Кстати, не очень согласен, что сайд эффекты делают из компоуза не UI. Это скорее просто способ как из UI выбраться наружу. Просто можно посмотреть на ReactJs. По факту эти библиотеки очень похожи. Реакт позиционирует себя, как чисто UI библиотека.

  • 2 жыл бұрын

    Молекула, судя по всему, это чисто функциональный MVI. Интересный подход. Все больше замечаю ситуации в Kotlin, когда какая-то логика, состояние умещается в объекте, и класс с внутренними свойствами вообще не нужен. Как раз тот самый случай, когда все можно вынести в простые функции модуля, без лишних оборачиваний в объекты, и все зависимости передавать как аргументы. Для Ktor, к примеру, уже есть функциональная надстройка над Koin, где граф зависимостей тоже строится на функциях, т.к. сам Ktor тоже в этой стилистике.

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Да, интересно будет посмотреть куда все придет. Планирую записать тренды на следующий год, думаю будет крайне интересно

  • @aliaksandrbohush5257
    @aliaksandrbohush52578 ай бұрын

    C [8:29] Алексей начинает проходить собес по алгоритмам.

  • @procolharum1960
    @procolharum19602 жыл бұрын

    У тебя этот видос выпал из плейлиста по композу

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    О, спасибо большое, сейчас добавлю )

  • @Michael100788
    @Michael1007882 жыл бұрын

    Привет! предлагаю осветить такие темы как использование Баз Данных в мобильной разработке, тот же SQlite, Room, Realm;. Также обсудить практическое использование в условиях командное разработки систем контроля версий Git/GitHub

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Есть видео про Room на канале

  • @ivanchepelkin6347
    @ivanchepelkin63472 жыл бұрын

    Спасибо - стало намного понятнее! Разобрались, почему так часто вызывался SideEffect и вылазил один и тот же state?

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Мм это какой тайм код?)

  • @ivanchepelkin6347

    @ivanchepelkin6347

    2 жыл бұрын

    @@MobileDeveloper , начало с 37 минуты про SideEffect. Далее у вас один и тот же стэйт несколько раз вылазил)

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    @@ivanchepelkin6347 а ну он так и должен вызываться) каждая рекомпозиция приводит к его вызову )

  • @pavelaleksandrov441
    @pavelaleksandrov4412 жыл бұрын

    derivedStateOf может быть полезен для маппинга одной модели данных в другую. Или, например, можно сделать отдельное состояние, которое будет вычисляться от нескольких других состояний.

  • @pavelaleksandrov441

    @pavelaleksandrov441

    2 жыл бұрын

    Например, если на экране есть какие-то данные, которые динамично изменяются, и на основе них нужно иметь другие состояния экрана

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Да, спасибо

  • @antaki93
    @antaki938 ай бұрын

    К 17-ой минуте полностью потерял нить повествования. Я всё понимаю, мысли разные могут приходить, когда всё с одного дубля записывается. Но какая-то последовательность изложения материала должна быть?

  • @paulsoja2732
    @paulsoja27322 жыл бұрын

    Спасибо за видео. Не в качестве критики, но всё же - очень отвлекает когда махаешь руками на видео.

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Попробую не махать 😂

  • @ivanchernukhin8677
    @ivanchernukhin86772 жыл бұрын

    А можно ссылку на молекулу?

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    code.cash.app/the-state-of-managing-state-with-compose

  • @homie2417
    @homie24172 жыл бұрын

    Теперь ооп гавно, а функции круто. Когда вы уже определитесь...)

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    А я где-то там сказал что ооп гавно, а функции круто?

  • @user-oc7py1vy6s
    @user-oc7py1vy6s2 жыл бұрын

    Поставил на этом и предыдущем видео "Спасибо" комментарий. Но они не видны. Деньги хоть дошли? Я пойду писать в гугл, чтобы они починили эти комментарии.

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Сейчас посмотрю, я видел на почту пришло два письма. Гугл иногда удаляет комменты.. я хз почему

  • @MobileDeveloper

    @MobileDeveloper

    2 жыл бұрын

    Судя по тому что я вижу они не дошли, ну по крайне мере в статистике их нет. В любом случае спасибо вам огромное за поддержку канала!)

Келесі