Варианты реактивного программирования в реальных проектах (не RxJS)

Поделиться
HTML-код
  • Опубликовано: 3 июн 2024
  • Слыша фразу “реактивное программирование” в React, большинство думает об инструментах типа RxJS, но надо помнить, что реактивное программирование - это парадигма, а не инструмент. И сегодня мы рассмотрим как эта парадигма была применена в реальных проектах
    Забрать бесплатные ресурсы и 4000 бонусов от Cloud․ru можно на сайте: sc.link/GOnZX
    ТГ канал - t.me/it_sin9k
    Поддержать Айти Синяка можно здесь:
    RUclips: / @it-sin9k
    boosty: boosty.to/sin9k
    Patreon: / itsin9k
    00:00 Анонс темы
    00:30 Машинка на халяву
    01:54 Что такое реактивное программирование
    03:50 Инструменты
    05:55 Реактивная инициализация проекта
    07:43 Изучаем пример в разрезе
    09:30 JSX нюансы
    10:20 Итоги подхода
    11:31 Чистые инструкции
    Подписаться на канал: / @it-sin9k
    Twitter: / it_sin9k

Комментарии • 72

  • @ivanp7697
    @ivanp7697 Месяц назад +28

    У нас довольно старый и очень большой проект, у которого несколько раз менялся главный мейнтейнер. И каждый новый приносил свое видение «прекрасного», начинал это внедрять, а потом на полпути либо сам уходил из проекта, либо его уходили. В итоге у нас сейчас в проекте и саги, и rtk-query, и просто редакс, и довольно большой пласт логики просто в глобальном контексте лежит, а в стилях у нас и css модули, и styled components используются. Я этот подход называю: «пишу, как в кайф»😅

    • @it-sin9k
      @it-sin9k  Месяц назад +1

      ахахах) наболело) я не раз приходил такие проекты зачищать))

    • @user-kt1kx6th7z
      @user-kt1kx6th7z Месяц назад

      hello

    • @ivanp7697
      @ivanp7697 Месяц назад

      @@user-kt1kx6th7z world

    • @ailabinsev
      @ailabinsev Месяц назад

      сочувствую...

  • @RussianFrontend
    @RussianFrontend 26 дней назад +3

    На текущей работе около 10+ проектов, везде используем mobx на реакте. Лучше системы реактивности не видел. Просто , понятно, удобно , гибко. Хочешь синглтоны , хочешь через контекст , хочешь view model local, и ТД. Все что существует можно реализовать на mobx , но нужно следить за архитектурой , ТК мобкс такой же гибкий как и реакт

  • @zeromvx4343
    @zeromvx4343 Месяц назад +11

    По поводу MobX. Сейчас декораторы - deprecated и все юзают makeObservable и makeAutoObservable. Также никто не мешает писать чистые инструкции используя Mobx. Все зависит от того, как спроектировали систему.

    • @it-sin9k
      @it-sin9k  Месяц назад +6

      в том проекте люди злоупотреблялии именно reaction( .. ) когда ты можешь подписаться на что то и реагировать. И там был прям целый пинг понг событий) но в итоге мы тоже перешли в рамках mobx на чистые инструкции и все стало норм работать) поэтому я и говорю, что нужно обсуждать не инструменты, а подходы написания кода)

    • @tgitw-tq6iu
      @tgitw-tq6iu 10 дней назад

      ​@@it-sin9k У тебя проблема с реализацией. Везде где используется redux это прямой путь на дно, а ты говоришь "нужно обсуждать не инструменты". Как раз таки в инструментах проблема. Можно что угодно в какой угодно подход записать. Но redux и его производные как были мусором так и останутся.

  • @badcoder1337
    @badcoder1337 Месяц назад +10

    Выкинули effector, затащили MobX, запретили в нем реакции регламентом и кайфуем от чистого кода

    • @andyjs666
      @andyjs666 Месяц назад

      А можете в двух словах написать, что пошло не так с Эффектором?

  • @mrkva1367
    @mrkva1367 Месяц назад +1

    Привет, Айти Синяк и его команда. Вы лучшие

    • @it-sin9k
      @it-sin9k  Месяц назад

      Привет ;-) спасибо!

    • @alexanderskusnov5119
      @alexanderskusnov5119 Месяц назад

      Да нет, обычные рекламщики. минус

  • @SckottJackson
    @SckottJackson Месяц назад +7

    Используем на проектах effector.
    Если заранее продумывать схему потока данных и не перебарщивать со сложностью, то вполне удобно с этим работать

    • @BogdanPolonsky
      @BogdanPolonsky Месяц назад +2

      Приветик)
      Мне кажется тут сильно от масштаба проекта зависит, например если всё приложение это небольншой монолит, где можно заранее продумать все потоки данных, тогда в реактивном подходе хоть с тем же эффектором всё будет окей.
      Но если проект становится настолько большим, что приходится переходить на микрофронты, то каждый из них внутри может и пусть будет реактивным, но связи между ними не стоит делать реактивными, слишком велик шанс поменяв в одном месте разрушить что-то в другом.
      Опять же, всё утыкается в продумывание заранее. А потом переделывание всего потока данных если оказалось, что бизнес требования поменялись.

    • @SckottJackson
      @SckottJackson Месяц назад +1

      @@BogdanPolonskyОо, привет, неожиданная встреча)
      Абсолютно согласен с тобой - микрофронты, как и любые другие юниты приложения, стоит делать менее связанными

    • @it-sin9k
      @it-sin9k  Месяц назад +3

      вот тут самое сложное) продумать схему потока данных, донести ее до всей команды в 20 человек. И при этом надо как то не переборщить со сложностью, а это зачастую самое сложное))

    • @user-sr5ts2jz7e
      @user-sr5ts2jz7e Месяц назад +1

      Года 3-4 назад пытался с ним поработать
      вообще не понравилось

    • @BogdanPolonsky
      @BogdanPolonsky Месяц назад

      ​@@SckottJackson да, неожиданная встреча)) хотя мне кажется сейчас много кто синяка смотрит в комьюнити, так что можно знакомых встретить)

  • @user-un4xi6nb2u
    @user-un4xi6nb2u Месяц назад +1

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

    • @it-sin9k
      @it-sin9k  Месяц назад

      спасибо!) хорошая идея) звучит как будто дебажить микросервисы на бэке) сугубо по логам)

    • @golden_smiles
      @golden_smiles Месяц назад

      @@it-sin9k Это вообще-то главное преимущество редакса, как раз. Всегда понятно какой акшен прилетел и что произошло по логам. Удивительно, если ктото этого не делает, если говорить о больших проектах.

    • @it-sin9k
      @it-sin9k  Месяц назад +2

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

    • @user-uw9xp8en3v
      @user-uw9xp8en3v Месяц назад +1

      ​@@golden_smiles я думаю, это не преимущество, а вынужденная мера, так как стейт глобальный

    • @golden_smiles
      @golden_smiles Месяц назад

      @@user-uw9xp8en3v Никто не заставляет держать ВСЕ в глобальном стейте. Да, я помню, были времена активной агитации за это, уже охладели, в прошлом оставили. Но иногда без него никак. Вообще есть точка зрения, что стейт менеджеры не нужны особо, так как большинство юз-кейсов уже выделено в специализированые хуки-библы, типа Query. Но повторюсь, ИНОГДА без него никак, или ИНОГДА с ним удобнее. И тогда я не понимаю, как пользоваться стейт менеджером без логирования, потому что стейт минимум не локальный в таких случаях ВСЕГДА. Что когда поменяло его - можно понять только по логам. И не важно, Редакс или чтото еще, но в Редаксе эта проблема решена элегантно.

  • @egorovsa
    @egorovsa Месяц назад +2

    Привет. Спасибо за видос, как всегда интересно. Но вот насчет редакс-саги я не совсем понял. Если мобыкс таки да, поскольку там сеттеры(хз как щас , раньше было) оверрайднули, то сага таки нет, ибо это просто реализация мидлы, как и танки итд, но на генераторах. Проще мне думается было бы просто сказать Редакс и Мобыкс ,

    • @it-sin9k
      @it-sin9k  Месяц назад +1

      мы обсуждаем инструменты) а реактивное программирование можно достичь на огромном количестве инструментов) по факту, если есть поток событий, на которые реагируют, то это уже большой шаг в стороны реактивщины)

  • @hitmen061
    @hitmen061 Месяц назад

    На проекте используем rtk query с тэг провайдерами и всё как-то само обновляется)

  • @grol5555
    @grol5555 Месяц назад +1

    У нас на проекте в качестве стора реактивный effector, выкинули mobX. Ну нет проблем, которые описаны в видео. Как-то всё решается через event, effect и store. Если действительно «лютая» бизнес-логика, техлид заставляет рисовать диаграмму состояний, чтобы легко было понять.
    Где-то 2 недели потратил на обучение, а потом как-то всё стало просто логично и понятно. Просто логика у реактивного программирования иная.
    По моему опыту, реактивность нужна, когда уйма асинхронной бизнес-логики, которая то последовательная, то параллельная, то ждёт 3-х одновременных событий и ещё где-то в длинной цепочке появляется ошибка. MobX не тянет.
    Работал на проекте с Redux и Redux-Saga их понять в разы сложнее, чем реактивность.

  • @someChicoRy
    @someChicoRy Месяц назад

    🔥🔥🔥

  • @_boolive_
    @_boolive_ 17 дней назад

    Согласен

  • @user-ik7rp8qz5g
    @user-ik7rp8qz5g Месяц назад +1

    Саги я лично не использовал из-за ущербного синтаксиса генераторов, но видел в интернетах такой комментарий: "Саги вам не нужны до тех пор, когда они действительно необходимы. Но тогда вам уже не саги нужны, а переписывать архитектуру приложения"
    А по теме - чем такой подход отличается от шины данных? Там ведь тоже одни компоненты в шину спамят, другие на нее подписываются, отлавливают нужные события и реагируют на них.

    • @it-sin9k
      @it-sin9k  Месяц назад

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

  • @HEX_CAT
    @HEX_CAT Месяц назад +1

    Годный контент подъехал, благодарствуем❤

  • @NoName-zh7cc
    @NoName-zh7cc Месяц назад

    Саня, ты лучший

    • @it-sin9k
      @it-sin9k  Месяц назад

      спасибо!)

  • @filcondrat
    @filcondrat Месяц назад +1

    мне кажется подход signals как в solidjs частично решает перечисленные проблемы

    • @it-sin9k
      @it-sin9k  Месяц назад

      надо будет изучить)

  • @alexanderskusnov5119
    @alexanderskusnov5119 Месяц назад

    Обычное функциональное программирование (мне нравится Haskell), а также DSP-процессоры.

  • @deantek
    @deantek Месяц назад +2

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

    • @it-sin9k
      @it-sin9k  Месяц назад +1

      не было проекта, где мне RxJs понадобился))

    • @deantek
      @deantek Месяц назад

      @@it-sin9k я пытался связать rxjs с react-native в рамках мультичейн криптокошелька, сам кошелек с разными блокчейнами создать удалось, но вот rxjs использовать было больно(

    • @CJIu3eHb
      @CJIu3eHb Месяц назад

      Так rtk - тоже реактивное, как и все где есть Pub-Sub, как я понимаю. RxJS хорош там, куда его тащить спецом не надо ради пары случаев применения. Например, в том же ангуляре.

    • @deantek
      @deantek Месяц назад

      @@CJIu3eHb rtk банально проще

    • @aleksprimetv
      @aleksprimetv Месяц назад

      ​@@it-sin9kон лучше подходит где нужно какую то инфу с датчиков обрабатывать

  • @dalisoft
    @dalisoft Месяц назад +1

    Про рекламу, жалько что только от РФ можно зарегистрироваться. Хотел бы попробовать

    • @andreyrudin2286
      @andreyrudin2286 Месяц назад

      да там уже Computed т.е. то что должно быть Free tier уже не доступно (

    • @andreyrudin2286
      @andreyrudin2286 Месяц назад

      наврал, это в одной из форм не работал, реально создал ) 146 рублей/месяц на белый IP адрес ) работает.

  • @user-qn5mu3eq2w
    @user-qn5mu3eq2w Месяц назад

    sin9k, идёшь на HolyJS?

    • @it-sin9k
      @it-sin9k  Месяц назад

      в онлайне буду смотреть)

  • @azabroflovski
    @azabroflovski Месяц назад

    vue

  • @tgitw-tq6iu
    @tgitw-tq6iu 10 дней назад

    Я не знаю на основании чего rx-поделку называют реактивной. Это обычный калбек к которому прикрутили цепочку преобразований. Реактивности там ровно ноль. Подобного подходу тысячи лет он используется в sh.
    Твой пример с ручной лапшой ничего не делает. Вопроса в инициализации вообще никакой нет. Инициализация в рамках динамической реактивной модели выделяется лишь потому что она строит зависимости между данными и инициализирует связи между ними. Твоя код ничего этого не делает. Вот добавился новый чат - что ты будешь с этим делать? Вызывать эту функцию заново и выкачивать всё?

  • @j1nger417
    @j1nger417 Месяц назад +2

    Озбекистон ба пеш !!!

  • @azabroflovski
    @azabroflovski Месяц назад

    ИМХО дизайн реактивности Vue просто потрясающий, его декларативный подход делает код чистым и легко читаемым

    • @corvus278
      @corvus278 Месяц назад +2

      Реактивность хороша для ui слоя, что бы не заморачиваться актуализаций ui. Но если выносить её на другие уровни, то становится очень сложно простраивать флоу логики, из-за чего очень сложно дебажить и вносить новые изменения

    • @user-uw9xp8en3v
      @user-uw9xp8en3v Месяц назад +1

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

  • @tgitw-tq6iu
    @tgitw-tq6iu 10 дней назад

    Сама реактивность как таковая данным не сильно нужна. Особенно в вебе. Основная проблема, которую решает реактивность - это починка раеакт. Реакт максимально кривое подели. С убогим дизайном и реализацией. С нерабочими концепциями типа вдома и прочими фантазиями.
    Если реакт обновлять не таргентно - он будет тормозить совсем до невозможного уровня. Обновить его в принципе невозможно. Он никак не связывает отображение и данные из которых был построен. Точно так же как твой код в пример на 11:41
    Поэтому его нужно как-то обновлять. Нужны средства связывания данных/отображения вопреки всем палкам в колёса, которые вставляет реакт.
    Если максимально упрощать проблему - имея id пользователя и изменения - ты можешь найти этого пользователя и применить изменения. Найти же какой компонент/дом связан с этим элементом не представляется возможным и потому все проблемы.

  • @NEAmico_mat
    @NEAmico_mat Месяц назад +1

    First

  • @DavidTch
    @DavidTch Месяц назад

    Считаю очень плохо что реакт(гей) сообщество не приняло rxjs! Подозреваю потому что им показалось это слишком сложно! А rxjs очень хорош! Очень гибкий и удобный!

    • @vadimmasaltsev5292
      @vadimmasaltsev5292 Месяц назад +3

      Ты чего такой обиженный)

    • @user-eb5yw9ui6o
      @user-eb5yw9ui6o Месяц назад +2

      приведи примеры в каких кейсах именно?
      не работал с rxjs, но хотел бы узнать о его плюшках

  • @titsex
    @titsex Месяц назад

    Микрофончик шумит(