Делюсь опытом по использованию reselect

Поделиться
HTML-код
  • Опубликовано: 16 ноя 2024

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

  • @NoName-zh7cc
    @NoName-zh7cc Год назад +2

    Просто лучший канал о фронтенде. Саша, огромное спасибо!

    • @it-sin9k
      @it-sin9k  Год назад +1

      Спасибо! Очень приятно :)

  • @ArtikMan1994
    @ArtikMan1994 Год назад

    Отличное видео.
    Я как раз много времени тратил на то, чтобы думать и проверять стоит ли конкретный селектор мемоизировать и думал "А не пойдет ли эта мемоизация мне в убыток?". Но этим видео автор переубедил что лучше выбрать подход постоянного оборачивания т.к. это сэкономит много времени и бизнесу и разработчикам, и главное - лучше ошибиться и сделать лишнюю мемоизацию, чем ошибиться и сделать лишний ререндер. Все дело в цене ошибки в случае разных подходов.
    Было бы еще круто, если бы здесь было упомянуто о том, что реселект по дефолтну имеет кэш 1го уровня и что мемоизация будет работать некорректно если использовать один инстанс селектора в разных компонентах

  • @Elator11777
    @Elator11777 Год назад +1

    Всегда полезно залезть под капот редаксу и посмотреть, как там все крутится и работает! Спасибо!

  • @LevShuroff
    @LevShuroff Год назад +6

    Неплохо было бы записать полное видео по использованию redux с хуками, redux с mapstatetoprops, redux toolkit, и rtk query в ещё одном видео

  • @kspshnik
    @kspshnik Год назад

    Супер!!! Особенно хорошо про "важность" почесывания ЧСВ на review :-)

    • @it-sin9k
      @it-sin9k  Год назад

      Просто очень жизненно))) сам не раз чесал себе ЧСВ))

  • @РусланКутынко
    @РусланКутынко Год назад +1

    За вывод в конце поставил бы дополнительный лайк. Сколько раз сталкивался с тем, что чем проще правило, тем больше вероятность, что оно будет соблюдаться. А то начинают мудрить, разные условия выдумывать "если так, то надо делать вот этак"... смотришь на это и понимаешь, что бред, никто не будет заморачивается. И так не только в программировании. Вообще по жизни это правило тоже работает

    • @it-sin9k
      @it-sin9k  Год назад

      Полностью согласен :)

  • @АнатолийГорбов-о1ь

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

  • @karinachi
    @karinachi Год назад +5

    Большое спасибо за видео, это лучший канал на мой взгляд! Было бы здорово посмотреть про redux toolkit, rtk query, и какие угодно темы по react, react native

    • @it-sin9k
      @it-sin9k  Год назад +1

      Спасибо за такую высокую оценку! Постараюсь до всего дойти) нужно время на это)

    • @romanmed9035
      @romanmed9035 Год назад

      @@it-sin9k надеюсь и на мобикс хватит времени или поочередно.

    • @it-sin9k
      @it-sin9k  Год назад

      @@romanmed9035 мобикс точно стоит в очереди, с ним у меня был реальный опыт более 2 лет) так что есть что рассказать)

    • @romanmed9035
      @romanmed9035 Год назад

      @@it-sin9k спасибо жду с нетерпением. несомненно от Вас это будет интересно. особенно совренменные тенденции и в связке с нынче модным функциональным программированием.

    • @username9409
      @username9409 Год назад

      @@it-sin9k привет, хотелось бы небольшой ролик почему использование useLayoutEffect в NextJS выдает предупреждения.

  • @АлексейСтепанов-к9о

    Лайк и подписка однозначно!!! Тема лишних рендеров из-за неправильных селекторов очень тонкая, но раскрыта восхитительно.

    • @it-sin9k
      @it-sin9k  Год назад +1

      спасибо! я очень старался)

  • @denvudd4492
    @denvudd4492 Год назад

    Вивчаю React + Redux і наштовхнувся на цей канал. Подобається, що все дуже схематично, розжовано і зрозуміло навіть початківцю у доволі складних темах. Однозначно підписка, один з тих скарбів, що я знайшов на тему фронта)
    Було б ще круто, якщо б бахнув пару інтенсивів чи просто підбірку відео з розробкою якогось нового пет-проекту
    Успіхів у розвитку каналу!)

  • @pavlof
    @pavlof Год назад

    очередное отличное видео! хотелось бы по возможности побольше, особенно про внутренности react-а

    • @it-sin9k
      @it-sin9k  Год назад

      Вы заказывайте более конкретные темы, я как вдохновения наберусь, возьму еще тему)

  • @modusvivaldi7701
    @modusvivaldi7701 Год назад

    Насчёт селектора getCourseExpirationDate: мы не знаем, как устроен задействованный внутри него селектор getCourse, который выбирает курс по id. Вполне возможно, что там производится поиск по массиву. Поэтому, если мы предполагаем наличие очень длинных массивов (как в getTotalPrice), то мемоизация нужна и здесь.

    • @it-sin9k
      @it-sin9k  Год назад

      Все верно :)

  • @dimitro.cardellini
    @dimitro.cardellini Год назад

    чекав, чекав і пропустив ;)
    так, все правильно -- краще обгорнути, ніж не обгорнути.
    до речі. реселект ще стимуліє до написання більш простих селекторів та подальшу їх композицію (до речі, мемоізацією при цьому можна керувати окремо від композиції) -- що є класною практикою

    • @it-sin9k
      @it-sin9k  Год назад +1

      Согласен :)
      Нажимайте колокольчик, чтобы не пропустить новое видео! Или спрашивайте в комментариях) я напишу, если такое видео уже существует или планируется)

  • @user-helena-mankova
    @user-helena-mankova 6 месяцев назад

    спасибо!

  • @someChicoRy
    @someChicoRy Год назад

    полезное видео

  • @vesta-aqualung
    @vesta-aqualung Год назад

    @it-sin9k вы упускаете важный момент заключающийся в том что мемоизация селектора выполняет две роли: первая хорошо освещена - стабильный возвращаемый результат и снижение числа рендеров, а о второй нет ни слова во всех роликах по этой теме: снижение нагрузки на процессор и память при вычислении результата .
    Все селекторы которые в данный момент находятся в смонтированном компоненте выполнятся при любом изменении стейта, даже если результат компоненту не интересен(об этом было в прошлом ролике)
    Поэтому не могу согласиться с тем что во втором случае createSelector не нужен. говоря так мы забываем о второй его роли, то есть все что выполняется внутри, теоретически может начать выполняться сотни раз в секунду, а в нём есть вот что: вызов другой функции неизвестной сложности, создание объекта даты и ее модификация, создание объекта форматирования и вызов самого форматирования. Утечка памяти гарантированная

    • @it-sin9k
      @it-sin9k  Год назад

      Спасибо за подробный комментарий :)
      "ни слова во всех роликах по этой теме: снижение нагрузки на процессор и память при вычислении результата " (с)
      в третьем примере как раз рассказываю про это. Что это экономит и вычислительные ресурсы
      "не могу согласиться с тем что во втором случае createSelector не нужен" (с)
      Как раз таки для этого я и записывал видео, про то что мемоизация не бесплатная. И createSelectors так же кушает ресурсы соразмерные вычислению дат. И тут как раз спорный вопрос, что дешевле, вычислять как раз дату или же сравнивать значения в createSelectors. При этом нужно хранить еще копию вычисленного значения. Что требует памяти дополнительной. В таких спорных ситуациях, как по мне можно и не оборачивать, результат будет тем же

    • @it-sin9k
      @it-sin9k  Год назад +1

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

    • @romanmed9035
      @romanmed9035 Год назад

      @@it-sin9k что недо джуны и делают. а потом что будет не важно.

  • @TarasovFrontDev
    @TarasovFrontDev Год назад

    "Unlike most global objects, Intl is not a constructor. You cannot use it with the new operator or invoke the Intl object as a function." © mdn

  • @Hauptsatana
    @Hauptsatana Год назад

    Мысль про оборачивание всех селекторов в reselect как соглашения внутри команды в целом верная, т.к. это упрощает чтение и отладку кода.
    Однако если у вас на проекте 20 фуллстек-разработчиков, и все могут править любой код (т.е. нет никакого разделения ответственности), то у вас в процессах что-то пошло не так.
    Вместо того, чтобы быстро и качественно реализовывать фичи в знакомой предметной области (когда есть понимание бизнес-процессов и их технической реализации), вы будете постоянно с нуля отлаживать эту лапшу из селекторов и Redux, т.к. один из 20 ваших "коллег" неделю назад добавил туда новый экшен/редьюсер/эпик, и теперь все идет по совершенно другому флоу. Узнаете вы об этом конечно же, когда вы придет бага на условно ваш функцинал 🙂
    Чтобы понять всю "магию" под капотом Redux и reselect, достаточно пару раз внимательно изучить исходники и послушать очень подробные и простые разборы от АйТи Синяк. Как только вы это поняли, в дальнейшем вас ждет экстенсивное накидывание в Redux-стор еще больше селекторов и экшенов, отчего вы не будете расти профессионально, а лишь зарываться в повторном дебаге кода, который совсем недавно вы с горем пополам раздебажили... По крайней мере таким был мой путь разработчика маркетплейса от крупнейшей в РФ IT-компании, который одновременно разрабатывало более 50 фронтендеров без разделения ответственности и с одним глобальным стором :-)
    Если для покрытия кода достаточно 5 человек, то с ними договориться намного проще, чем с 20, а самого кода становится на порядки меньше. Следовательно, уменьшается вероятность того, что вы будете видеть код впервые. Следовательно, вы (и еще 4 коллег) будете знать, как он работает. Следовательно, можно не использовать мемоизацию селекторов, там где она действительно не нужна.
    Но лучше вообще не использовать Redux и reselect, а рассмотреть MobX, где есть реактивность и честные вычисляемые свойства, которые будут И повторно вычисляться И вызывать ререндер ТОЛЬКО при изменении зависимых свойств, а не повторно вычисляться при ЛЮБОМ изменении стейта, НО вызывать ререндер только если новое вычисленное значение отличается от старого (как это сделано в reselect) 🙂 При этом вместо десятка файлов для Redux, вся логика будет лежать внутри одного-двух файлов, что тоже значительно упрощает чтение и отладку.

  • @LRXAORLOV
    @LRXAORLOV Год назад +1

    У меня другая стратегия - переезд на react-query ))

  • @mzpizote
    @mzpizote Год назад

    Контент как всегда топ! Желаю кучу подписчиков 😎

  • @TheTexPro
    @TheTexPro Год назад +2

    Спасибо!

  • @Apexof
    @Apexof Год назад

    Спасибо

  • @synopticum
    @synopticum Год назад

    А почему мемоизация в Redux не включена по-дефолту?

    • @it-sin9k
      @it-sin9k  Год назад

      Вопрос отличный, похожая дискусия была и про React.memo. Думаю аргументы будут примерно те же. Вот я видео про это записал:
      ruclips.net/video/uEeZ2TUkOCE/видео.html

  • @baileysli6235
    @baileysli6235 Год назад

    4:35 А почему тут не стоит? Создания двух инстансов классов (Data и Intl) вряд ли совсем бесплатное. И если данные не менялись, то мне кажется этого лучше не делать

  • @verzsut6744
    @verzsut6744 Год назад

    Привет, возможно помнишь как я писал про свою либу react-afc. Я её доделал и даже протестировал (поверхностно с помощью React Devtools) скорость отрисовки обычного и компонента из либы. Получилось что в простых компонентах почти не уступает, а в более сложных (с useCallback, useRef и т.д.) даже в разы обгоняет обычный компонент.
    Но суть не в этом.
    Как у опытного специалиста, хотел бы спросить как можно хоть немного продвинуть пакет в массы (ведь без фидбэка никуда). Статью на каком-нибудь сайте написать, или ещё чего может?
    P.S. видео топ, жду ещё :)

    • @it-sin9k
      @it-sin9k  Год назад +1

      да, лучше всего написать статью на хабре и потом ходить в телеграмм каналы и предлагать им опубликовать твою статью :)
      главное найти того, кто захочет ее установить, пусть это будет для начала 1-3 проекта, но на них ты сможешь оттестировать свою либу и уже в более широкие массы с протестированным продуктом легче пойти :)

  • @zhenia14
    @zhenia14 Год назад +2

    декабрь 2022 синяк всё ещё думает, что что-то сравнивается по ссылке, а что-то по значению...

    • @pavelshev4473
      @pavelshev4473 Год назад +2

      А как?
      Поделитесь, интересно же

    • @Илья-с1л6э
      @Илья-с1л6э Год назад +1

      @@pavelshev4473 подпишусь на тред) Тоже интересно

    • @it-sin9k
      @it-sin9k  Год назад +4

      @@pavelshev4473 тоже жду с нетерпением, развития этого треда)

    • @alexd1723
      @alexd1723 Год назад

      @@it-sin9k начни пока сам копать, вот тебе и тема для интересного ролика, вдруг он решил потроллить

    • @Aleksei-r4r
      @Aleksei-r4r Год назад

      Опа)

  • @popuguytheparrot_
    @popuguytheparrot_ Год назад +1

    reselect в 2022 ахахахахаха

    • @Илья-с1л6э
      @Илья-с1л6э Год назад

      а что не так?

    • @popuguytheparrot_
      @popuguytheparrot_ Год назад +1

      @@Илья-с1л6э в современных проектах нет этого рудимента

    • @Илья-с1л6э
      @Илья-с1л6э Год назад

      @@popuguytheparrot_ эм... ну пока в современных проектах есть редакс,там будет reselect

    • @popuguytheparrot_
      @popuguytheparrot_ Год назад +1

      @@Илья-с1л6э пока в прослойке между стулом и клавиатурой будет мусор, тоже самое будет в проекте

    • @Илья-с1л6э
      @Илья-с1л6э Год назад

      @@popuguytheparrot_ понятно. Просто пустословие