Новые хуки useTransition и useDeferredValue в React 18

แชร์
ฝัง
  • เผยแพร่เมื่อ 12 เม.ย. 2022
  • Конкурентный режим в React 18 позволяет помечать некоторые обновления стейта как несрочные, за счет чего улучшается пользовательский опыт. Приложение становится более стабильным, т.е. не лагает с точки зрения интерфейса, а несрочные обновления становятся асинхронными. Для этих целей React предложил нам два новых хука useTransition и useDeferredValue.
    Пример из видео: codesandbox.io/s/react-concur...
    Мои курсы по вебу с купонами:
    ✅ mishanep.com/
    📢 Поддержка канала:
    / mishanep
    www.tinkoff.ru/rm/nepomnyasch...
    paypal.me/mishanep

ความคิดเห็น • 60

  • @dirty_arkady
    @dirty_arkady 2 ปีที่แล้ว +23

    Канал определенно обделен просмотрами, очень хорошая подача материала!

    • @user-fo8zl6iw9u
      @user-fo8zl6iw9u 8 หลายเดือนก่อน

      На мой взгляд подача недостаточно хорошая. Даже в доке реакта намного понятнее и проще изложены концепты.

  • @AlexGabber
    @AlexGabber 2 ปีที่แล้ว +2

    Очень простое и наглядное объяснение. Спасибо большое!

  • @etatevosian
    @etatevosian 2 ปีที่แล้ว +8

    Очень понравился канал. Очень мало в сети подобных доступных к понимаю материалов. Спасибо автору!

  • @SergAlexson
    @SergAlexson 2 ปีที่แล้ว +1

    Миша, спасибо за видео! Все подробно и доступно разжёвано)

  • @lightinthedark5708
    @lightinthedark5708 2 ปีที่แล้ว +4

    Михаил, ценю Вас и Ваш канал за доступное и понятное объяснение. Спасибо за видео.

  • @WinchesterD
    @WinchesterD 9 หลายเดือนก่อน

    Спасибо за видео, готовлюсь к интервью по Реакту, будет что рассказать. :)

  • @koala2077
    @koala2077 ปีที่แล้ว

    Спасибо за ролик. Читал статьи насчет конкурентного режима но так и не понимал до конца что это такое. Ваше видео хорошо объясняет эту концепцию)

  • @atlantatesla9348
    @atlantatesla9348 ปีที่แล้ว +4

    Рада, что нашла это видео. Отличное и доступное объяснение! На русском языке не так много хороших видео о фичах 18 версии react'а. Успехов вам!

  • @user-ik8rn3lp7u
    @user-ik8rn3lp7u 7 หลายเดือนก่อน

    Михаил благодарю за чёткое доходчивое видео, я с лёгкостью усвоил данный материал! Было интересно и полезно! 🎉

  • @unknown.6914
    @unknown.6914 4 หลายเดือนก่อน

    Спасибо, за полезный контент Михаил

  • @dr_morpho
    @dr_morpho ปีที่แล้ว

    Супер! Спасибо вам🤝

  • @user-zs7kr6yp2s
    @user-zs7kr6yp2s 9 หลายเดือนก่อน

    лучшее объяснение конкуретного режима, спасибо за работу

  • @user-dy9zo3oq6k
    @user-dy9zo3oq6k 2 ปีที่แล้ว +1

    Познавательно, лайк)

  • @krohinri
    @krohinri ปีที่แล้ว

    Миша, спасибо! Давай еще!

  • @fizzbuzz5807
    @fizzbuzz5807 2 ปีที่แล้ว

    Большое спасибо! Вот вам комментарий, лайк и подписка!

  • @WebEnv
    @WebEnv 2 ปีที่แล้ว

    Оч доступно, спасибо!

  • @vladvoloshenko5701
    @vladvoloshenko5701 ปีที่แล้ว

    спасибо за контент, огонь!!

  • @user-kg6fz5tz2b
    @user-kg6fz5tz2b 2 ปีที่แล้ว +1

    Спасибо!

  • @dimahinev
    @dimahinev 2 ปีที่แล้ว

    Мое уважение 🎩

  • @Kotovar
    @Kotovar หลายเดือนก่อน

    Спасибо)

  • @user-qc2ft6pz7h
    @user-qc2ft6pz7h ปีที่แล้ว

    Очень мало лайков))Подача отличная, приятно слушать вас)

  • @Ivanesenses
    @Ivanesenses 2 ปีที่แล้ว

    Лайк неглядя!

  • @ivanoliinyk8404
    @ivanoliinyk8404 2 ปีที่แล้ว +2

    Дуже дивно чому так мало переглядів та вподобайок, але не зупиняйся ми це виправимо)))

  • @irinal7766
    @irinal7766 ปีที่แล้ว

    Отличнейший канал!

  • @onevermore
    @onevermore 2 ปีที่แล้ว

    спасибо!

  • @NeoCoding
    @NeoCoding 8 หลายเดือนก่อน

    тоже в копилку, грасиас

  • @suslikest3708
    @suslikest3708 2 ปีที่แล้ว

    лойс!

  • @user-qb7jg4hx5l
    @user-qb7jg4hx5l 11 หลายเดือนก่อน

    Спасибо

  • @Moishe_Rubinstein
    @Moishe_Rubinstein ปีที่แล้ว +2

    Привет из Харькова!

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      Привет из Малаги.

  • @AndrewFloatrx
    @AndrewFloatrx ปีที่แล้ว +1

    также рекомендую ознакомиться с такими паттернами как debounce & throttle ))) до выхода этих хуков юзали именно их...

    • @The14Some1
      @The14Some1 ปีที่แล้ว +4

      Мне кажется, и после выхода этих хуков продолжат. Тут это выглядит как не очень контроллируемая полумера. У автора по-прежнему тормозит ввод, тогда как при debounce/throttle можно добиться совершенно нормального поведения даже на очень тормозном компьютере.

  • @mars_family
    @mars_family 2 ปีที่แล้ว +1

    Спасибо за видео, немного не по теме вопрос, вы делаете акцент на том что инпут не управляемый, а в чем отличие если бы он был управляемый ?🙏

    • @mishanep
      @mishanep  2 ปีที่แล้ว +1

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

  • @user-ug7ur8xu1c
    @user-ug7ur8xu1c ปีที่แล้ว +1

    Интересно как это будет работать когда у нас данные, которые мы получаем с AJAX запросов, будут лететь в redux стору. И соответственно перерендер компонента будет форсить useSelector, а не изменение стейда компонента. Как пример, такая же ситуация как на видео, но фильтрация у нас происходит на стороне бэка

    • @AndrewFloatrx
      @AndrewFloatrx ปีที่แล้ว +1

      используйте debounce для оптимизации запросов...

  • @LRXAORLOV
    @LRXAORLOV 2 ปีที่แล้ว

    А если бы мы положили search в useDeferredValue, и фильтровали по deferredSearch ?

  • @profesor08
    @profesor08 ปีที่แล้ว

    Штука однозначно полезная, но от проблемы не избавляет, а лишь приуменьшает ее, и на каком-то средненьком телефоне, будет проявляться довольно заметно. Чтоб полностью избавиться от блокировки инпута, надо несколько иначе формировать компоненты, чтоб список рендерился отдельно, инпут отдельно, и данные считались отдельно. А сам пользовательский ввод надо как-то тротлить, например с помощью функций из lodash. И вот тогда даже на средненьких телефонах все будет круто.

    • @sharkman6434
      @sharkman6434 ปีที่แล้ว

      а в чём смысл и преимущество ренедерить отдельно список, инпут и счтёт данных подскажите пожалуйста )

  • @user-gi8pn8or7l
    @user-gi8pn8or7l 5 หลายเดือนก่อน

    Привет! корректно ли оборачивать, например, отправку на сервер данных через axios в startTransition:
    const onSubmit = (values: z.infer) => {
    startTransition(() => {
    login(values)
    })
    }, и да, в данном случае я использую Nextjs, здесь "login" это сервер экшн. Но все равно интересно

  • @deriirostyslav2335
    @deriirostyslav2335 ปีที่แล้ว

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

  • @IanNerovny
    @IanNerovny ปีที่แล้ว

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

  • @iGotton
    @iGotton 2 ปีที่แล้ว

    +

  • @romandeveloper7720
    @romandeveloper7720 ปีที่แล้ว

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

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      Что-то вроде него, да.

  • @vladislavkomkov5178
    @vladislavkomkov5178 3 หลายเดือนก่อน

    Что за адовые надстройки на реакте? Не уж то в этом есть эта необходимость??

  • @codokit
    @codokit 2 ปีที่แล้ว

    Ещё вариант решения проблем с быстрым вводом - это тротлить пользовательский ввод.

    • @CJIu3eHb
      @CJIu3eHb 2 ปีที่แล้ว

      Не тротлить, а дебонсить.

    • @MIHANIZM56
      @MIHANIZM56 ปีที่แล้ว +1

      Тоже самое хотел предложить. Интересно имеет ли смысл связка дебаунса и стартТранзишн

  • @user-888azim-97
    @user-888azim-97 ปีที่แล้ว

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

    • @mishanep
      @mishanep  ปีที่แล้ว +1

      У меня на канале никогда не было рекламы =) Ютуб конечно может и сам вставки делать, не спрашивая автора. Но монетизацию на данном канале я не включал.

  • @sivkaburka1062
    @sivkaburka1062 2 ปีที่แล้ว

    Досмотрел до 11:20

    • @orionpro79
      @orionpro79 ปีที่แล้ว

      а дальше что? Инет вырубили?)

  • @your_hero_n1
    @your_hero_n1 4 หลายเดือนก่อน

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

  • @user-lk4mb3nw3d
    @user-lk4mb3nw3d 5 หลายเดือนก่อน

    Эм, ну поиск на клиенте это тоже не бест практис ) Ну и фильрацию по каждому клику делать тоже не очч, наверно сюда лучше подошел дебаунсе?

  • @Garry_Levin
    @Garry_Levin หลายเดือนก่อน

    Видео может и неплохое, но без исходного кода не имеет никакого смысла. Дизлайк.

  • @chintore
    @chintore ปีที่แล้ว

    useDeferredValue работает в связке с мемоизацией. При изменении в инпуте он выдает значение с прошлого успешного рендеринга (коммита) и запускает новый рендеринг с уже актуальным значением. Соответственно после изменения инпута происходит сразу рендеринг инпута и МЕМОИЗИРОВАННОГО результата для ресурсозатратной части. Сразу после этого реакт начинает еще один рендеринг, но теперь useDeferredValue возвращает актуальное значение. После готовности второго рендеринга актуальный результат отрисовывается.
    Без мемоизации useDeferredValue бесполезен, и даже вреден.

    • @chintore
      @chintore ปีที่แล้ว

      Новые изменения инпута могут прервать прошлые незаконченные рендеринги и запустить новый процесс. Соответственно ресурсозатратные вычисления ПОЛНОСТЬЮ будут производиться не для каждого введенного символа, а только для последнего изменения. Это все хорошо показано на схеме в видео. Логика очень схожа с debouncing.

  • @vasyok92
    @vasyok92 2 ปีที่แล้ว

    Спасибо)