Работа с историей, локацией и приватными роутами в React-router 6

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

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

  • @ВикторияИлларионова-ц7ю

    0:56 - кнопка назад
    6:25 - переадресация
    7:50 - объект Location
    9:53 - приватные роуты
    16:25 - упрощенная авторизация с createContext
    18:18 - создание prop value
    19:54 - кастомный хук useAuth
    20:47 - использование контекста
    25:39 - объяснение авторизации
    27:19 - о коммитах на github

  • @SiriScare
    @SiriScare Год назад +12

    Занимаюсь уже который день по этим урокам и тихо офигеваю, насколько оказывается качественно можно делать учебные материалы. Не могу больше молчать. Это офигенно!!
    Где ж ты был все это время, родной.

  • @lightinthedark5708
    @lightinthedark5708 2 года назад +76

    Превосходное изложение материала, не перестаю радоваться вашему присутствию в RUclips. Спасибо, Михаил.

    • @mishanep
      @mishanep  2 года назад +1

      Спасибо и Вам на добром слове =)

  • @Костя-с5л8я
    @Костя-с5л8я 2 года назад +11

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

  • @alsusayfulina1865
    @alsusayfulina1865 Год назад +3

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

  • @sudactudak5743
    @sudactudak5743 2 года назад +7

    Редко пишу комментарии, но я просто не знаю, представляете ли Вы, насколько Ваши ролики по React Router полезны (другие видео от Вас не смотрел еще :) ). Мало того, что 6 версия библиотеки почти ни в каких русскоязычных источниках подробно не освещается, так еще и такой полезный контент для новичков, как в этом ролике. Надеюсь, будете продолжать и набирать популярность!

  • @АлексейМастяница-ы4е
    @АлексейМастяница-ы4е 2 года назад +13

    Что-то слишком часто Вы нас балуете годным контентом )
    Огромное спасибо , однозначно лайк )

  • @ДмитрийМельников-ъ3в
    @ДмитрийМельников-ъ3в 2 года назад +15

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

  • @ЯнаАлександровна-э7к

    Какие прекрасные уроки! Прохожу с их помощью урок по созданию SPA со странами ) Спасибо!!!

  • @vo_skor
    @vo_skor 2 года назад +8

    Вы для меня находка Михаил!)
    Есть вашим подписчиком с серии видео про Router,которая мне очень пригодилась.
    Отличная подача материала, без воды и по делу 👍
    Как только пройду испытательный, поддержу ваш канал✌️

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

    На платном курсе встретил обучение React-router 5, но проект был на React 18 и 5-я версия выдавала ошибки. После этого обратился к ютубу, и как же я счастлив, что мне попались именно вы

  • @АлексейСтепанов-к9о
    @АлексейСтепанов-к9о 2 года назад +2

    Михаил, спасибо за урок. С нетерпением жду следующего видео.

  • @vladimirmartynyuk5476
    @vladimirmartynyuk5476 2 года назад +1

    Большое спасибо, после обновления роутера не мог понять как с ним работать, ваш плейлист по новому роутеру как спасательный круг !)

  • @АлександрПараконный

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

  • @tazorprod.934
    @tazorprod.934 Год назад

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

  • @andreydolzhenkov4308
    @andreydolzhenkov4308 2 года назад +1

    Огромное спасибо, по React много материала смотрю за последние время , и очень много искал как раз именно эту тему с роутами , авторизацией и работой с приватными роутами, очень круто и понятно объясняете!
    И благодаря вам теперь это как дважды два 😀
    Огромное спасибо за такой качественный и крутой материал 👍

  • @iJoise
    @iJoise 2 года назад +1

    Твой канал очередное открытие для меня!) Всё думал когда сесть за доку и посмотреть что там нового, но с тобой всё становится проще:)))
    Развития твоему каналу))

  • @ЕленаМ-ц2ъ
    @ЕленаМ-ц2ъ Год назад

    Это не видео, это - золото. Вы супер

  • @DmitryA
    @DmitryA 2 года назад

    Очень помогло в понимании, как это всё работает вместе. Спасибо.

  • @Roman-kn7kt
    @Roman-kn7kt 2 месяца назад

    Это ТОП!!! Спасибо большое!

  • @vlasovdanildev
    @vlasovdanildev 2 года назад +1

    Михаил, вы лучший!

  • @RBBoxing
    @RBBoxing 2 года назад

    очень полезная информация по работе с пакетом react router version 6, благодарю

  • @КотМатроскин-х9ь

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

  • @SergeyPerestoronin
    @SergeyPerestoronin 2 года назад

    То что доктор прописал! Сразу куча вопросов отпала.

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

    Очень информативное видео. Спасибо большое за проделанную работу !!!

  • @ИгорьГолуб-н6щ
    @ИгорьГолуб-н6щ 2 года назад

    Михаил, огромное спасибо за Ваш труд. Отличное видео.

  • @MykolaVer
    @MykolaVer 2 года назад

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

  • @ЕвгенийТяка-ч4х
    @ЕвгенийТяка-ч4х 2 года назад +1

    спасибо большое! Очень информативно

  • @Кофей-й8х
    @Кофей-й8х 2 года назад

    Ты лучший! Всегда все по полочкам!

  • @НиколайХаритонов-й3н

    От души душевно. Хорошие уроки, спасибо.

  • @Виталя-ц2б
    @Виталя-ц2б 2 года назад

    Михаил, спасибо большое за лекцию!

  • @АлександрСадыков-ъ8щ

    Спасибо за подробное объяснение!)

  • @ЕвгенийШут-о7н
    @ЕвгенийШут-о7н 2 года назад

    Хождение по истории - круто

  • @_oxios_
    @_oxios_ 2 года назад

    Супер урок! Спасибо Михаил!

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

    Спасибо, очень интересно посмотреть 😊

  • @МаксимМельников-и7б

    Шикарный канал. Спасибо вам!

  • @ЕгорЗосимов-ж6б
    @ЕгорЗосимов-ж6б 2 года назад

    Отличный канал, автору большой респект!

  • @ilyaprotsenko1023
    @ilyaprotsenko1023 2 года назад

    Спасибо огромное за ваши старания!

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

    топ подача!

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

    потрясно

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

    Спасибо, Михаил!🤘

  • @ГлебКодрик-ж5ж
    @ГлебКодрик-ж5ж 2 года назад

    Лучшая подача информации

  • @Kain9111
    @Kain9111 2 года назад

    Михаил, большое спасибо, как всегда спасаете)))

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

    Спасибо

  • @olegpavlov4329
    @olegpavlov4329 2 года назад

    Чувствую, как ростуууууу. Спасибо. Помог разобраться.

  • @andrewsmal5173
    @andrewsmal5173 2 года назад

    Просто нет слов!!! Спасибо

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

    Михаил спасибо!!!

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

    Хотелось бы вариант, когда все страницы (кроме входа) приватные :) Может есть более красивая реализация такого сценария. Что бы не оборачивать каждую страницу

    • @maxamax5695
      @maxamax5695 11 месяцев назад +1

      Такой же вопрос у меня) нашли решение?

    • @protonys
      @protonys 11 месяцев назад

      @@maxamax5695 к сожелению, нет

  • @jamesrodrigez9548
    @jamesrodrigez9548 2 года назад

    Как всегда познавательно !

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

    Отлично, очень полезно, спасибо

  • @МаксимВ-к9ч
    @МаксимВ-к9ч 2 года назад

    Спасибо! Классное видео. Было бы здорово, если бы хоть маленько рассказал про HOC.

    • @mishanep
      @mishanep  2 года назад

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

  • @lyudmilabukhvalova8427
    @lyudmilabukhvalova8427 2 года назад

    Просто супер, спасибо!

  • @valerian6943
    @valerian6943 2 года назад

    Отличная информация

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

    уроки огонь

  • @ammoney159
    @ammoney159 2 года назад

    Спасибо большое!!!

  • @АмыргаТавакай
    @АмыргаТавакай 2 года назад

    Лучший!

  • @ЯнаПронько-ы7ъ
    @ЯнаПронько-ы7ъ Год назад +1

    Спасибо за видео, подписалась, думаю этот канал будет мне полезен!
    Вопросик: не рекомендуется использовать navigate(-1), а лучше Link, как я поняла, но ведь для Link нужно знать конкретный путь, а если мы хотим просто назад(то есть откуда пришел пользователь) как быть?

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

      Если нужна кнопка назад, то navigate(-1) отлично подходит. Иногда предыдущая страница бывает не пригодной для возвращения по каким-то причинам, например, страница оплаты. Но тут надо отдельно рассматривать. Либо в историю такую страницу не записывать, либо отдельную логику прописывать.
      У нас есть state, доступный через location, и мы при каждом переходе можем фиксировать откуда пришли. Соответственно, использовать эту информацию, в том числе и для возвращения на предыдущие шаги.

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

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

  • @konglomora3230
    @konglomora3230 2 года назад

    спасибо!!!!

  • @norwinlol
    @norwinlol 2 года назад

    Спасибо c:

  • @ТарасМ-х9ф
    @ТарасМ-х9ф 2 года назад

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

  • @AndranikArshakyan
    @AndranikArshakyan 2 года назад

    Работа с историей, локацией и приватными роутами в React-router 6

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

    Бля это потрясающе

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

    Приветствую, Михаил. Отличные уроки! Конкретно в этом уроке не могу понять почему не срабатывает replace, когда логинимся. В итоге я могу попасть обратно на страницу логина нажав стрелку назад. Подскажите пожалуйста, в чем может быть причина?

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

    4 раза переписывал все вместе с видео и только потом догнал, как все работает. Ох, если бы не твой видос, наверное лысым стал бы.))))

  • @oleksandr_zerov
    @oleksandr_zerov 2 года назад +1

    Михаил, очень понятная подача материала! У меня появилась одна проблема, которую никак не могу решить: хук useAuth предоставляет null значение для { user, signin, signout }. Пробовал и без хука, напрямую обернуть в , все равно не видит функции. После сабмита формы получаю [Uncaught TypeError: signin is not a function]. Не сталкивались с такой пролемой?

    • @mishanep
      @mishanep  2 года назад

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

  • @vitaliyskorickiy8701
    @vitaliyskorickiy8701 2 года назад

    Не зря я на Вас подписан)) уже не первый раз тушите пожар моего пе@дака

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

    Михаил, можете пожалуйста рассказать, как сделать так, чтобы все роуты требовали авторизацию, без бойлерплейта

  • @ЭдгарЕдигарян-ц3ъ
    @ЭдгарЕдигарян-ц3ъ 2 года назад

    good

  • @aleksprimetv
    @aleksprimetv 2 года назад

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

    • @mishanep
      @mishanep  2 года назад

      Приветствую.
      Не совсем понятна логика. Выглядит так, что попав на страницу с конкретной ссылкой (например с id 1) мы можем кликнуть на ссылку, никуда не перейти (id всё ещё один), но захотим сделать новый запрос на сервер? Не очень понятно зачем. Теоретически у нас компонент может иметь также гет-параметры, которые тоже можно добавить в зависимости и заодно сделать частью запроса к серверу.

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

    Друг а ты не подскажешь как занулить поля в форме после нажатия кнопки submit в redux-form

  • @amir18n
    @amir18n 2 года назад

    Михаил, в первую очередь спасибо за проделанную работу! У меня вопрос, а как лучше поступить с приватными роутами, если есть общая разметка. Как обернуть общую разметку?



    Нужно обернуть element Layout в ? Спасибо за ответ!

    • @mishanep
      @mishanep  2 года назад

      Приветствую, Амир!
      Если вы хотите, чтобы все страницы сайты были приватными, то тогда да, можно попробовать ваш вариант.
      В принципе не обязательно все страницы делать с одинаковой общей частью, подобных "родителей" может быть несколько для разных страниц.
      Хотя возможно вам просто нужно какую-то часть в Layout показывать по условию, а не делать весь сайт приватным (страница авторизации тоже может захотеть какого-то оформления). А скрывать можно по условию, проверяя авторизован ли пользователь, используя тот же хук useAuth.

    • @amir18n
      @amir18n 2 года назад

      @@mishanep спасибо большое 🙏

  • @ash1089
    @ash1089 10 месяцев назад

    В реальном проекте у нас не будет auth false или true, мы этот аuth получаем асинхронным способом, что делать в этом случае?

  • @bodya5645-e5l
    @bodya5645-e5l 2 года назад +1

    А какая разница между переадресацией через navigate('ссылка', {опции}) и через ?

    • @mishanep
      @mishanep  2 года назад +1

      Компонент Navigate предназначен для переадресации мгновенно при попадании на страницу. Метод navigate для событий, вроде клика мыши.

    • @bodya5645-e5l
      @bodya5645-e5l 2 года назад

      @@mishanep Спасибо за ответ!!!!

  • @microgames18
    @microgames18 2 месяца назад

    Всем привет! Можете подсказать можно ли для перехода по истории не создавать новые кнопки, а повесить их на дефолтные браузерные кнопки. Я так понимаю они же не будут работать, если происходит постраничная пагинация? Например, я прокликал по порядку : 1,2,3,4,5 страница, а потом нажимаю дефолтную браузерную кнопку назад. Но она, я так понимаю не сработает без navigate(-1)?)

  • @katyaru7424
    @katyaru7424 2 года назад

    7:43 вы добавили переадрисацию на другую страницу, в каких случаях это может быть полезно? Почему просто не изменить path ?

    • @mishanep
      @mishanep  2 года назад

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

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

    Здравствуйте. Подскажите, как зарегистрированному пользователю можно ограничить некоторые страницы?

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

    как соединить connected-react-router middleware с react-router v6 в 18 версии реакта? и вообще как я понял conncted-react-router не работает в 18 версии реакта или я просто не могу настроить получая ошибку - Cannot read properties of undefined (reading 'pathname')

  • @lesharper8751
    @lesharper8751 2 года назад

    Спасибо! Интересно, можно ли с помощью React router вызывать обновление страницы, например чтобы сайт увидел пришедшую с сервера куку, на spa

    • @mishanep
      @mishanep  2 года назад

      Не сталкивался с подобной задачей. Обычно при таком подходе общение с сервером происходит либо посредством REST API/GraphQL, либо через WebSocket.

  • @doitbetter7687
    @doitbetter7687 2 года назад

    У меня вопрос, а если мне надо стилизовать страницу из папки pages и я хочу это сделать через css модули, то мне надо создаваать папочку под каждую страницу и туда уже складывать и саму page и css модуль? или в этом случае как-то по-другому делается?)) Спасибо за урок!)

    • @mishanep
      @mishanep  2 года назад +1

      Чаще всего стили пишутся на уровне компонентов. А страница просто переиспользует их. При необходимости на уровне страницы могут быть дополнительные стили.
      Посмотрите в сторону css-модулей.

  • @ИванКарпинский-м6ж
    @ИванКарпинский-м6ж 2 года назад

    А пользователь не может подменить данные стейта на клиенте и получить таким образом доступ к приватным роутам? буду признателен если объяснишь

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

    объясните подробнее пожалуйста кто знает
    13:46
    на 7строчке - зачем вот такие знаки вопроса после каждого слова?
    fromPage = location.state?.from?pathname

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

      оператор опциональной последовательности

    • @ВикторияЗапорожан-ф2в
      @ВикторияЗапорожан-ф2в Год назад

      Вадим, это optional chaining. Простыми словами - мы пытаемся получить доступ к from только если state === true. В случае, если state не будет существовать, то у вас не упадет ошибка и не нужно такие кейсы проверять с помощью if, например. Аналогично с pathname - пробуем его достать только если from существует

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

      Этот код использует опциональную цепочку обращений (optional chaining) и считывает значение свойства from из объекта location.state, если оно существует, иначе возвращает undefined.
      Если значение location.state не является объектом или у этого объекта нет свойства from, то fromPage примет значение undefined.
      Две знаком вопросов (?.) - это оператор опциональной цепочки. Он позволяет безопасно обходить свойства объекта, которые могут отсутствовать, чтобы избежать ошибок Cannot read property 'xxx' of undefined.
      В данном случае, если location.state не определен или равен null, то вместо ошибки будет возвращено значение undefined, а дальше сработает еще одна опциональная цепочка для свойства pathname.

  • @HowManyShrimps-g7z
    @HowManyShrimps-g7z Год назад

    жаль, отсутствует код урока

  • @metall1c
    @metall1c 2 года назад

    А что означает такая запись:
    ....
    зачем оборачивать в "пустой элемент" ?

    • @mishanep
      @mishanep  2 года назад

      В JavaScript мы можем вернуть в качестве значения только одну сущность. Поэтому в случаях, когда сущностей несколько, их надо во что-то обернуть. Не всегда хочется создавать дополнительную разметку, поэтому существует такая штука как React.Fragment. В данном случае вариант является укороченной записью использования React фрагмента.

    • @metall1c
      @metall1c 2 года назад

      @@mishanep дополнительная разметка - имеется ввиду типа блок ?

    • @mishanep
      @mishanep  2 года назад

      @@metall1c да

  • @tsyklop9398
    @tsyklop9398 2 года назад

    Подскажите. Как это все дружить с редаксом?

  • @moi-nick-zanyat
    @moi-nick-zanyat 2 года назад

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

    • @ЕвгенийБорисевич-т6д
      @ЕвгенийБорисевич-т6д Год назад

      Привет. Может ты решил данную проблему и можешь рассказать как ее обойти?

    • @moi-nick-zanyat
      @moi-nick-zanyat Год назад

      @@ЕвгенийБорисевич-т6д если честно я уже и не помню))

  • @d_r_robot
    @d_r_robot 2 года назад

    Меня почему то при обновлении страницы MainPage выкидывает обратно на Login

    • @mishanep
      @mishanep  2 года назад

      в упрощённом варианте стейт живёт только в оперативке, и при обновлении авторизация слетает.
      В реальности мы хранили эту инфу в локал сторедж и синхронились бы с ним при обновлении страницы.

  • @maximaliev-lomach2994
    @maximaliev-lomach2994 2 года назад

    и еще вопрос, как сделать так, что бы при перезагрузке страницы не оправлялся запрос на сервер об авторизации пользователя?

    • @mishanep
      @mishanep  2 года назад

      а чтобы не терять данные авторизации, их обычно хранят в браузерной памяти. Об этом тоже есть видео ruclips.net/video/sdlYNKjCGU0/видео.html
      В useEffect можно перед запросом на авторизацию можно проверить не авторизованы ли мы в настоящий момент.

  • @МаксимНырков-у6г
    @МаксимНырков-у6г 2 года назад

    Вот зачем убирать useHistory и заменять его на новое название? Нельзя было оставить название

  • @maximaliev-lomach2994
    @maximaliev-lomach2994 2 года назад

    Добрый день. Вы говорите, что можно реализовать авторизацию через Redux. Как это можно сделать?

    • @mishanep
      @mishanep  2 года назад

      У меня есть пример с Redux-Toolkit и авторизацией с Firebase ruclips.net/video/ivtbRBEjLW8/видео.html

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

    Код урока бы...

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

      Есть репозиторий под плей-лист
      github.com/michey85/youtube-react-router-v6

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

      @@mishanep спасибо Михаил!

  • @АндрейИльин-д6ж
    @АндрейИльин-д6ж 2 года назад +1

    слыш ты. это хлам, а не видео. чё refresh не показал?

  • @НастяСорокина-з5и
    @НастяСорокина-з5и 2 года назад

    Здравствуйте! Подскажите, пожалуйста, выскакивает ошибка:
    TypeError: Cannot destructure property 'signin' of 'Object(...)(...)' as it is null
    На строчке: const {signin} = useAuth() в компоненте Loginpage.js
    Может знаете, с чем это связано? проверяю целый час, все также как и у вас..

    • @mishanep
      @mishanep  2 года назад

      Выведите в консоль, что вам возвращает хук. Скорее всего это null, из которого ничего деструктуризацией не вытащить. Полагаю, хук сделан некорректно.

    • @НастяСорокина-з5и
      @НастяСорокина-з5и 2 года назад

      @@mishanep Да, убрала начальное значение null и действительно помогло), а еще неправильно передавала Context, исправила, теперь все работает! Спасибо большое!!😊

  • @ДаниилРинкевич-г2ю
    @ДаниилРинкевич-г2ю 2 года назад

    Всё отлично изложено и понятно, супер контент, спасибо вам большое

  • @serge-KSV
    @serge-KSV 2 года назад

    Супер урок! Спасибо Михаил!

  • @volodymyrvorona2250
    @volodymyrvorona2250 2 года назад

    Спасибо за Ваши старания!