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

React Router предоставляет хук useNavigate, который возвращает функцию для навигации между страницами. Есть также компонент Navigate для редиректов. А с помощью навигации и объекта location можно организовать защищенные страницы - только для авторизованных пользователей.
00:00 Введение
00:43 История и кнопка "Назад"
03:38 Параметры навигации
06:15 Переадресация с Navigate
07:43 Объект location
09:43 Приватные роуты
Мои курсы по вебу с купонами:
✅ mishanep.com/
📢 Поддержка канала:
www.tinkoff.ru/rm/nepomnyasch...
paypal.me/mishanep

Пікірлер: 129

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

    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 Жыл бұрын

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

  • @lightinthedark5708
    @lightinthedark57082 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @user-fs1pm5oe5s
    @user-fs1pm5oe5s2 жыл бұрын

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

  • @sudactudak5743
    @sudactudak57432 жыл бұрын

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

  • @ilyaprotsenko1023
    @ilyaprotsenko10232 жыл бұрын

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

  • @user-gu7rh5nm7c
    @user-gu7rh5nm7c2 жыл бұрын

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

  • @volodymyrvorona2250
    @volodymyrvorona22502 жыл бұрын

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

  • @user-vm4cv5ku3n
    @user-vm4cv5ku3n2 жыл бұрын

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

  • @sergeikurankov8072
    @sergeikurankov80722 жыл бұрын

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

  • @user-ky4vq5jm5u
    @user-ky4vq5jm5u2 жыл бұрын

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

  • @iJoise
    @iJoise2 жыл бұрын

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

  • @user-oc8js5gy1f
    @user-oc8js5gy1f2 жыл бұрын

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

  • @user-bp7jb5of5d
    @user-bp7jb5of5d2 жыл бұрын

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

  • @user-qc1cn4dl8q
    @user-qc1cn4dl8q2 жыл бұрын

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

  • @user-jk4ij2yh4f
    @user-jk4ij2yh4f2 жыл бұрын

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

  • @MykolaVer
    @MykolaVer2 жыл бұрын

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

  • @user-mg1du2vh6x
    @user-mg1du2vh6x2 жыл бұрын

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

  • @vo_skor
    @vo_skor2 жыл бұрын

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

  • @user-cb1fo4yq5t
    @user-cb1fo4yq5t2 жыл бұрын

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

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

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

  • @user-iy2hd6ix9j
    @user-iy2hd6ix9j2 жыл бұрын

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

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

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

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

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

  • @jamesrodrigez9548
    @jamesrodrigez95482 жыл бұрын

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

  • @vladimirmartynyuk5476
    @vladimirmartynyuk54762 жыл бұрын

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

  • @RBBoxing
    @RBBoxing2 жыл бұрын

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

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

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

  • @user-cr1pq1wz8v
    @user-cr1pq1wz8v2 жыл бұрын

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

  • @Kain9111
    @Kain91112 жыл бұрын

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

  • @user-yp3sc7bl5z
    @user-yp3sc7bl5z2 жыл бұрын

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

  • @andrewsmal5173
    @andrewsmal51732 жыл бұрын

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

  • @DmitryA
    @DmitryA2 жыл бұрын

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

  • @vlasovdanildev
    @vlasovdanildev2 жыл бұрын

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

  • @mrrappbit
    @mrrappbit10 ай бұрын

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

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

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

  • @lyudmilabukhvalova8427
    @lyudmilabukhvalova84272 жыл бұрын

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

  • @user-eg2pz4wk8z
    @user-eg2pz4wk8z2 жыл бұрын

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

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

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

  • @tazorprod.934
    @tazorprod.93411 ай бұрын

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

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

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

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

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

  • @sergey9784
    @sergey978411 ай бұрын

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

  • @user-xq8qk7ss8i
    @user-xq8qk7ss8i2 жыл бұрын

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

  • @valerian6943
    @valerian69432 жыл бұрын

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

  • @Roman-kn7kt
    @Roman-kn7kt15 күн бұрын

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

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

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

  • @ammoney159
    @ammoney1592 жыл бұрын

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

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

    уроки огонь

  • @olegpavlov4329
    @olegpavlov43292 жыл бұрын

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

  • @user-ic4dk4sp3y
    @user-ic4dk4sp3y2 жыл бұрын

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

  • @user-un7gi2tn5h
    @user-un7gi2tn5h2 жыл бұрын

    Лучший!

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

    Спасибо

  • @benchik100
    @benchik10010 ай бұрын

    топ подача!

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

    потрясно

  • @user-xv1oc1pj3i
    @user-xv1oc1pj3i2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

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

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

  • @konglomora3230
    @konglomora32302 жыл бұрын

    спасибо!!!!

  • @norwinlol
    @norwinlol2 жыл бұрын

    Спасибо c:

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

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

  • @maxamax5695

    @maxamax5695

    9 ай бұрын

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

  • @protonys

    @protonys

    9 ай бұрын

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

  • @user-ps2ge3cc5r
    @user-ps2ge3cc5r2 жыл бұрын

    good

  • @maxamax5695
    @maxamax569510 ай бұрын

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

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

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

  • @mishanep

    @mishanep

    Жыл бұрын

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

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

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

  • @aleksprimetv
    @aleksprimetv2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

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

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

  • @vitaliyskorickiy8701
    @vitaliyskorickiy87012 жыл бұрын

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

  • @alxkr7937
    @alxkr793711 ай бұрын

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

  • @lesharper8751
    @lesharper87512 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

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

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

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

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

  • @tsyklop9398
    @tsyklop93982 жыл бұрын

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

  • @oleksandr_zerov
    @oleksandr_zerov2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @doitbetter7687
    @doitbetter76872 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @katyaru7424
    @katyaru74242 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

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

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

  • @amir18n
    @amir18n2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @amir18n

    @amir18n

    2 жыл бұрын

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

  • @user-ht2bp5no2x
    @user-ht2bp5no2x2 жыл бұрын

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

  • @user-gj1je7te7s
    @user-gj1je7te7s2 жыл бұрын

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

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

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

  • @AndranikArshakyan
    @AndranikArshakyan2 жыл бұрын

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

  • @maximaliev-lomach2994
    @maximaliev-lomach29942 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

    а чтобы не терять данные авторизации, их обычно хранят в браузерной памяти. Об этом тоже есть видео kzread.info/dash/bejne/pZigu7CEmqathZM.html В useEffect можно перед запросом на авторизацию можно проверить не авторизованы ли мы в настоящий момент.

  • @user-dl1ii9tp4u
    @user-dl1ii9tp4u2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @user-dl1ii9tp4u

    @user-dl1ii9tp4u

    2 жыл бұрын

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

  • @microgames18
    @microgames1811 күн бұрын

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

  • @ash1089
    @ash10899 ай бұрын

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

  • @d_r_robot
    @d_r_robot2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @moi-nick-zanyat
    @moi-nick-zanyat2 жыл бұрын

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

  • @user-pd6wi9iw7m

    @user-pd6wi9iw7m

    Жыл бұрын

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

  • @moi-nick-zanyat

    @moi-nick-zanyat

    Жыл бұрын

    @@user-pd6wi9iw7m если честно я уже и не помню))

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

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

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

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

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

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

  • @mishanep

    @mishanep

    Жыл бұрын

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

  • @metall1c

    @metall1c

    Жыл бұрын

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

  • @mishanep

    @mishanep

    Жыл бұрын

    @@metall1c да

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

    16:43

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

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

  • @mishanep

    @mishanep

    Жыл бұрын

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

  • @velikorossnationalist4259

    @velikorossnationalist4259

    Жыл бұрын

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

  • @maximaliev-lomach2994
    @maximaliev-lomach29942 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

    У меня есть пример с Redux-Toolkit и авторизацией с Firebase kzread.info/dash/bejne/m6qoxLR7dc2yh5s.html

  • @user-qj2yg1rn3j
    @user-qj2yg1rn3j2 жыл бұрын

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

  • @user-vn2nx1yq9e
    @user-vn2nx1yq9e2 жыл бұрын

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

  • @user-cg2vb5ub8d
    @user-cg2vb5ub8d2 жыл бұрын

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

  • @mishanep

    @mishanep

    2 жыл бұрын

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

  • @user-cg2vb5ub8d

    @user-cg2vb5ub8d

    2 жыл бұрын

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

  • @_oxios_
    @_oxios_2 жыл бұрын

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