Предзагрузка данных через роутинг

  Рет қаралды 30,839

Михаил Непомнящий

Михаил Непомнящий

Күн бұрын

Осенью 2022 года React Router научился делать асинхронные запросы на сервер при переходах между SPA страницами. Разбираемся как это можно сделать.
Код из видео github.com/mic...
Мои курсы по вебу с купонами:
✅ mishanep.com/
📢 Поддержка канала:
/ mishanep
www.tinkoff.ru...
paypal.me/mish...

Пікірлер: 124
@stepankizim3277
@stepankizim3277 2 жыл бұрын
Ваш канал сокровище для Junior dev
@raufhashimov241
@raufhashimov241 2 жыл бұрын
И не только для джуна :)
@threehundredbucks3212
@threehundredbucks3212 2 жыл бұрын
@@raufhashimov241 сильно сомневаюсь, что НЕ джун станет смотреть ролик по новой фиче, вместо того-чтобы открыть оф доку )
@СашаАлександр-е4м
@СашаАлександр-е4м 4 ай бұрын
​@@threehundredbucks3212 станет)
@Romul3003
@Romul3003 2 жыл бұрын
Ахренеть! Я не успеваю за всем этим фронтэндом) Спасибо!
@mkonin
@mkonin 2 жыл бұрын
Присоединяюсь. Ток к одному привык уже новое
@ГусяНоздреватая
@ГусяНоздреватая 2 жыл бұрын
Век живи, век учись Быть разрабом зашибись
@biLLie_wiLLie
@biLLie_wiLLie 2 жыл бұрын
Я два выпуска назад попросил Михаила рассказать про это обновление и он меня услышал)
@6azinga
@6azinga 2 жыл бұрын
Спасибо огромное за то, что Вы находитесь на острие технологий front-end!
@yuriyovdeyev685
@yuriyovdeyev685 2 жыл бұрын
Здорово, очень полезная инфа и подача отличная! Спасибо!
@YaniaRZ
@YaniaRZ Жыл бұрын
Спасибо! Буду следить за каналом, чтобы следить за новинками)
@dimalukashenko4865
@dimalukashenko4865 2 жыл бұрын
Хороший урок, очень ждал продолжения курса
@АнатолийГорбов-о1ь
@АнатолийГорбов-о1ь Жыл бұрын
Очень интересное видео! Спасибо за курс по v6 реакт роутеру!)
@offiza8631
@offiza8631 2 жыл бұрын
Спасибо большое за такое полезное видео!)
@dimondmarcker3179
@dimondmarcker3179 2 жыл бұрын
на самом деле теперь v6.4 очень похожа на remix, в плане всех этих лоадеров, Form и т.д. в теории это может полностью изменить подход к разработке некоторых приложений хочется еще больше видео про react-router-dom v6.4!
@oops61rus
@oops61rus 2 жыл бұрын
судя по странице ReactRouter там справа вверху прям отсылка идет к Remix, так что вполне вероятно
@kujojotaro3464
@kujojotaro3464 2 жыл бұрын
Это и есть remix
@olegkravchenko9655
@olegkravchenko9655 2 жыл бұрын
Если внимательно посмотреть на имена авторов того и другого, то всё станет понятно ;)
@irinal7766
@irinal7766 2 жыл бұрын
Спасибо, очень своевременное для меня видео)
@victormog
@victormog 2 жыл бұрын
Шикарное видео!
@it.s_vlad
@it.s_vlad Жыл бұрын
для тех, кто не понимает, зачем нужен loader: - без использования loader - сначала загружается компонент, потом после его рендера начинается загрузка данных в useEffect. - с использованием loader - компонент и данные загружаются параллельно.
@nevrox6197
@nevrox6197 Жыл бұрын
Но в таком случае отстутсвует lazy loading и клиент не видит ничего,немного не понятен плюс этого подхода,кроме того что не подтягиваются хуки реакта
@NovikovEugene13
@NovikovEugene13 10 ай бұрын
Просто прописываешь if (!data) return null и не паришься насчёт лишнего рендера (выполнения функции компонента)
@Konstantin19877
@Konstantin19877 2 жыл бұрын
Очень круто. Спасибо за контент.
@romuelson
@romuelson 2 жыл бұрын
Отличная декомпозиция 🤠
@МатвейДенисов-т2к
@МатвейДенисов-т2к 2 жыл бұрын
Михаил, контент потрясающий
@dmitryts9093
@dmitryts9093 2 жыл бұрын
Спасибо за Ваши видео
@_Black_Mirror_
@_Black_Mirror_ 2 жыл бұрын
Спасибо за разбор новых возможностей. Пользоваться я этим не буду. Новый синтаксис никакой пользы не несет
@Алексей-и5д3в
@Алексей-и5д3в 2 жыл бұрын
Супер. Спасибо большое
@oleksiikriuchkov7399
@oleksiikriuchkov7399 Жыл бұрын
Такой подход очень ускоряет загрузку!🥰
@СергейВер-и9ю
@СергейВер-и9ю 2 жыл бұрын
Как по мне, Роутер слишком много на себя пытается взять. Кастомный хук по получению данных гораздо легче по написанию, понимаю, скорости загрузки...
@Григорий-ь5ь7о
@Григорий-ь5ь7о Жыл бұрын
Он Гений
@ufc_uz6
@ufc_uz6 Жыл бұрын
Супер
@zoombix5753
@zoombix5753 2 жыл бұрын
Можно ещё роликов по новой версии роутера?)) Там линки обновили с ними немного не ясно(
@АлександрКос-р3щ
@АлександрКос-р3щ 9 ай бұрын
Про try catch не забываем
@superboba2007
@superboba2007 2 жыл бұрын
на мой взгляд в случае с использованием с defer получается какое то трудно читаемое нагромождение кода всего лишь для того, что бы показать компонент Loader. почему бы для этой задачи не сделать хук и использовать его вроде: const { data, loading, error } = useFetch("...") ?
@СергейВер-и9ю
@СергейВер-и9ю 2 жыл бұрын
import {useCallback, useState} from 'react'; const useRequest = (promise: (...args: TParams) => Promise) => { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const run = useCallback((...args: TParams) => { setData(null); setLoading(true); setError(null); promise(...args) .then((response) => { setData(response); setError(null); }) .catch((error: Error) => { setData(null); setError(error.message); }) .finally(() => { setLoading(false); }); }, [promise]); return {data, loading, error, run}; }; export default useRequest;
@ВладиславСвидерский-г6й
@ВладиславСвидерский-г6й 2 жыл бұрын
спасибо!
@0xSxVKaJnwQ
@0xSxVKaJnwQ 3 ай бұрын
Тоже не понял этих танцев с бубном. Если важно максимально быстро начать грузить данные, недостаточно ли просто возвращать плейсхолдер, если !data? Спустя 2 года... этим функционалом пользуются в проектах? Михаил - красавчик, это не обсуждается)
@mishanep
@mishanep 3 ай бұрын
Возможность загрузки данных средствами роутинга - это попытка перенести на уровень библиотеки функционал фреймворка (в данном случае Remix). Пользуются ли сегодня на проектах - не скажу. У меня на проекте до сих пор пятая версия роутинга используется 😁
@CyberGenius777
@CyberGenius777 2 жыл бұрын
Не знаю насколько это нужно. Геморроя только добавили. Будет ли этот функционал кто-то реально использовать и переписывать все - неизвестно
@alexandrmos205
@alexandrmos205 7 ай бұрын
Подскажите пожалуйста. Если работать не через Route, а через массив объектов, то как делать редирект, например, по клику на кнопку. Ведь useNavigate, работает только с route
@alexandrmos205
@alexandrmos205 7 ай бұрын
Подскажите, а как в переменную router передавать дополнительные параметры. Допустим я хочу передать в пропс одного из компонентов вложенных в router, состояние, которое создается хуком, но, так как хуки можно создавать только внутри компонентов (в данном случае внутри App), а router является внешней константой, то при передачи ее в RouteProvider, я никак этого сделать не смогу. Т.е. мне нужно создавать router уже внутри компонента App, чтобы передавать в пропсы состояния сделанные с помощью хуков, т.е. других вариантов нет?
@АлМ-ы8ъ
@АлМ-ы8ъ 2 жыл бұрын
Автор, скажите что такое "эндерфугнансы " на 19:18 (по таймлайну) ?
@mishanep
@mishanep 2 жыл бұрын
😄😄😄 Звучит смешно. Переслушал несколько раз и сам не пойму)) Ума не приложу откуда вылезло))
@АлМ-ы8ъ
@АлМ-ы8ъ 2 жыл бұрын
@@mishanep да и пофиг, все равно ты молодец😃
@user-irinaais90
@user-irinaais90 10 ай бұрын
Расскажите, пожалуйста, как писать вложенные роутеры по версии React Router 6.4 с помощью createBrowserRouter
@НікітаКорчемний-г4ч
@НікітаКорчемний-г4ч 9 ай бұрын
лично я в children роутах ещё одни чилдрены делаю и outlet-ом выбираю что где отрисовывать, возможно это не правильно, но оно работает, я буквально сегодня проверял. В крайнем случае почитай доку
@user-irinaais90
@user-irinaais90 9 ай бұрын
@@НікітаКорчемний-г4ч спасибо
@Napolion4ik
@Napolion4ik 2 жыл бұрын
На 23:15 вы не писали return defer ({...}), он обезателен или можно обойтись await-ом в return-e
@The14Some1
@The14Some1 2 жыл бұрын
Интересно, вы уже досмотрели до конца, или всё ещё ждёте ответа? :)
@Napolion4ik
@Napolion4ik 2 жыл бұрын
@@The14Some1 хаххаха смешно))досмотрел до конца )забыл удалить коментарий
@unknownrus920
@unknownrus920 2 жыл бұрын
Я может что упустил, но в чем преимущество перед просто загрузкой контента через useEffect при переходе на страничку?
@exsterx
@exsterx 2 жыл бұрын
тот же вопрос. я храню состояние в recoil без перезагрузки страницы - ранее подгруженные данные открываются мнгновенно фишка - дрочево ради дрочева
@CyberGenius777
@CyberGenius777 2 жыл бұрын
@@exsterx Согласен, ненужный гемор. Может это как-то влияет на производительность, что навряд ли... В общем, ненужная фишка
@d0paminer
@d0paminer 2 жыл бұрын
useEffect триггерит сайд-эффекты после рендера.
@exsterx
@exsterx 2 жыл бұрын
@@d0paminer раскройте подробнее, что вы имеете ввиду
@The14Some1
@The14Some1 2 жыл бұрын
@@exsterx Ну как минимум один дополнительный draw call
@vitaliynoveles6626
@vitaliynoveles6626 2 жыл бұрын
Спасибо за видео) Подскажите, пожалуйста, какая у вас тема стоит?)
@mishanep
@mishanep 2 жыл бұрын
Codesandbox
@Aleksandr_Bolshakov
@Aleksandr_Bolshakov Жыл бұрын
Уроки супер, но расскажи как организовать проект вместе с отдельным npm пакетом в котором находятся компоненты и импортируются в проект
@SkyAndStarss
@SkyAndStarss Жыл бұрын
а можно ли подход с роутер лоадером соеденить с редакс тулкитом??
@Maximurz1k
@Maximurz1k 2 жыл бұрын
Пример понятный но не продакшн) Покажите плз пример с RTK Query)
@mishanep
@mishanep 2 жыл бұрын
Так это же два разных подхода. Может быть со временем другие библиотеки предложат нам интеграции под возможности роутинга, пока она сырая.
@Maximurz1k
@Maximurz1k 2 жыл бұрын
@@mishanep Ну пока это первый заход "быть похожим на ангуляр" ну наконец то))) Ток в ангуляре можно было в резолвере сервисы подсосать. Это же тема не только для резолвинга данных, но еще и гвардинг доступов. Я вижу проблему в том, что нет четких паттернов "как делаем", просто сделали и в путь) Ну, будем вырабатывать
@redhook777
@redhook777 2 жыл бұрын
В продакшене ведь чаще всего next
@Maximurz1k
@Maximurz1k 2 жыл бұрын
@@redhook777 1) причем тут ssr 2) "чаще всего" это где? крупняк редко его использует, чаще свое. и большинство SPA это внутрянка где ssr не нужен
@СергейГеоргиев-в1ч
@СергейГеоргиев-в1ч Жыл бұрын
Как совместить это с reduxjs/toolkit, если мы обычно в toolkit вызывали асинхронную функцию через createAsyncThunk и через dispatch вызывали нужный нам reducer и записывали данные в state, а уже через redux-react используя useSelector передавали данные? Как я понял, сейчас мы данные получаем через useLoaderData помимо reduxjs/toolkit
@ГусяНоздреватая
@ГусяНоздреватая Жыл бұрын
Лучше не надо совмещать, обычно редакс нужен для управления состоянием каких-то больших данных, а предварительная загрузка react-router-dom для получения и отрисовки небольших. Ну а вообще для больших проектов данная фича выглядит как оверхед, ибо редакс или что-нибудь другое для state manage (например, react-query) прекрасно справиться без помощи библиотеки, которая в первую очередь нужна для роутинг, а не для предзагрузки
@limpchh
@limpchh 2 жыл бұрын
Чем тогда отличается загрузка постов через useEffect и defer. Ведь и там и там можно показывать лоадер, отличается только реализация
@mishanep
@mishanep 2 жыл бұрын
Создатели библиотеки с роутингом просто предложили нам разделить логику получения и потребления данных.
@limpchh
@limpchh 2 жыл бұрын
@@mishanep Понял, спасибо за ответ)
@singlebw4065
@singlebw4065 2 жыл бұрын
Здравствуйте Михаил. Как создать бесконечный роутер?
@sevgenberg585
@sevgenberg585 Жыл бұрын
{request,params} выдает ошибку, Unhandled Thrown Error! _ref is undefined делал все по видео!Что это может быть?
@adamburke4496
@adamburke4496 2 жыл бұрын
А есть ли кэширование в данной версии роутера?
@FOND645
@FOND645 Жыл бұрын
Подскажите, дружит ли React Router Dom с Electron?
@mishanep
@mishanep Жыл бұрын
У меня пока не было опыта работы с Electron.
@user-fn4jw5nc3z
@user-fn4jw5nc3z 11 ай бұрын
Да роутер многое на себя забирает из функционала, не думаю что многие будут этим пользоваться, скорее тем что привычнее
@tweeker2104
@tweeker2104 2 жыл бұрын
А возможно ли использовать useLoaderData в typescript? А то я пробую, а оно ругается на типы. В документации react-router-dom ничего не нашел об этом (ну или плохо искал :) )
@mishanep
@mishanep 2 жыл бұрын
В файлах декларации возвращаемый тип для этого хука идет как unknown. Поэтому, по логике, надо подготовить свой тип и указать его. const data = useLoaderData() as MyType
@Asgyr
@Asgyr 2 жыл бұрын
@@mishanep Спасибо очень помог ваш ответ !)))
@Napolion4ik
@Napolion4ik 2 жыл бұрын
Не много не понимаю какие плюсы дает этот метод предзаргрузки, да я сам когда то думал, а почему нельза передавать какие то данные по роутер после клика, всеравно под скелетом у нас используеться useContext , но разработчики что-то перемудрили
@CJIu3eHb
@CJIu3eHb 2 жыл бұрын
Интересно, а если без defer, то как отрисовать лоадер на зависшей (пока данные грузятся) странице, с которой идет переход. Чтобы люди понимали, что нажатие на кнопку/ссылку сработало и что-то делается.
@andreyyastrebtsov4367
@andreyyastrebtsov4367 2 жыл бұрын
useNavigation там есть хук и у него состояние есть. Ну тоесть используем так const navigation = useNavigation(). И там уже цепляемся navigation.state === 'loadiing и рисуем что надо
@ilovekurut
@ilovekurut Жыл бұрын
ох да запутаться можно.Пока одно выучишь, другое учить надо. И не понятно что на интервью спросят.Поэтому учим все подряд
@Wra-ij8yk
@Wra-ij8yk 2 жыл бұрын
Подскажите этот курс еще актуален?
@mishanep
@mishanep 2 жыл бұрын
Видео свежее, так что актуально. Но зависит от того, какую версию библиотеки вы в своем приложении используете. Там есть различия между версией 5, 6 и 6.4. В рамках плейлиста разбирается 6-я версия и последние дополнения, начиная с 6.4.
@constantine6464
@constantine6464 2 жыл бұрын
как раз когда реакт получает новый нативный хук use
@ramilnazmiev9448
@ramilnazmiev9448 Жыл бұрын
Подскажите как тема в VS называется ?
@mishanep
@mishanep Жыл бұрын
CodeSandbox
@Игорь-ч6н9м
@Игорь-ч6н9м 2 жыл бұрын
Как это будет работать с redux? Приходящие данные надо будет через стор обрабатывать?
@mishanep
@mishanep 2 жыл бұрын
Здесь могут быть разные сценарии поведения. В базовом варианте можно обойтись без складывания в стор. Здесь скорее вопрос, как избежать повторных запросов. На данной стадии вариантов кэширования из коробки не видно. Как подружить с лоадер с редаксом - вопрос, я пока не пробовал =)
@АлександрСкиталец-ц7р
@АлександрСкиталец-ц7р 2 жыл бұрын
Думаю если вам не нужны эти будут данные в другом компоненте. То их не стоит пробрасывать в стор redux. Бывает ситуации когда вам надо только получить и отрисовать данные и больше не где не использовать. Пока всё лишь предположение. Но всё равно очень полезный инструмент. Надо пробовать использовать в проекте.
@kinafermur
@kinafermur 2 жыл бұрын
Михаил, а вы не поделитесь статейкой где откопали такой способ получения данных, или копались в документации? очень интересно, круто что технология не стоит на месте
@mishanep
@mishanep 2 жыл бұрын
Изначально я узнал об этом в их release notes, которыми библиотека поделилась ещё на стадии беты. А дальше через документацию.
@alexandrd419
@alexandrd419 2 жыл бұрын
Если вы использовали angular, то расскажите почему react лучше? Ну кроме как простоты и количества вакансий. Помоему ангулар куда логичнее. верстка от логики отдельно, модульный подход. Есть сервисы. Компоненты верстать может верстальщик, без знаний js/ts. Все есть из коробки, и никаких там а мы на проэкте используем мобх, или еще чего. Хотя и простота тоже такое.... если взять ts, rxjs, redux(и всякий другой зоопарк), webpack, то тоже получается не так уж и просто. Просто учу angular. Мне нравится. Все из коробки. нормальный ооп. но вакансий на него значительно меньше. Вот думаю не зря ли его осваиваю? Хотя посмотрел в сторону реакт. Какая-я то ерунда и все вперемешку.
@mishanep
@mishanep 2 жыл бұрын
Я не работал с Ангуляром. Касаемо Реакта, то здесь от проекта надо плясать. Не каждый проект нуждается в роутинге на стороне клиента, не всегда нужен Redux и его аналоги, многие проекты спокойно обходятся и без ts, что удешевляет разработку и снижает порог входа.
@drunken_rubbish
@drunken_rubbish 2 жыл бұрын
В ангуляре зачастую ориентироваться сложнее, сам rxjs тоже весьма неприятная и сложная штука. На реакте в целом многие моменты делаются гораздо проще, на реакте больше выбор библиотек, на реакте лучше можно контролировать ререндеры. Да и он банально легче и меньше. Это его основные плюсы. У ангуляра, то что многое с коробки и то, что в модульном подходе код выглядит красиво, правда до первого взаимодействия с rxjs)))
@denissaripov7130
@denissaripov7130 2 жыл бұрын
Реакт даёт просто функцию, которая возвращает html и если возвращает то же, что и в прошлый раз - оптимизирует Под капотом ангуляра непонятно что, много декларативности и нужно запоминать какие-то решения тк так придумали разработчики Любой чел, знающий js, на реакт за день пересядет, а вот на ангуляр врятли
@richardvoronov3482
@richardvoronov3482 2 жыл бұрын
Ничем реакт не лучше. Инструмент всегда хорош, когда он в правильных руках. Реакт это библиотека, и его нужно уметь готовить. Ангуляр это фреймворк, свободы чуть меньше чем с реактом в плане композиции приложения и от этого код должен быть выше качеством, чем то что пишут на реакте. Реакт просто популярней ангуляра, поэтому его выбирают чаще, от того и вакансий больше. Мало где можно встретить хороший код на реакте как раз из-за того что библиотека не ограничивает разраба ни в чем, кроме не сложных правил написания хуков. Если это большая компания, вероятно, у них есть деньги нанять программистов, если это стартап или средняя компания то, вероятно, они уже наняли "реакт разработчиков", а не программистов. Так что, если хотите поскорее на работу, берите реакт и вперед, если уже освоили реакт попробуйте ангуляр.
@The14Some1
@The14Some1 2 жыл бұрын
​@@denissaripov7130 Блин, а тут, типа, придуманные разработчиками решения не нужно запоминать? Вот, мы прям сейчас обсуждаем последнюю версию роутера, который уже в третий раз значительно меняет парадигму своей внутрянки. У меня уже голова идёт кругом от редакса, редакс-квери, редакс-санк, ртк-квери и роутера разных версий.
@FailValiev
@FailValiev 2 жыл бұрын
А если заново надо получить данные?
@nikitasafonkin3077
@nikitasafonkin3077 2 жыл бұрын
перегружать компонент🤔
@vty4261
@vty4261 Жыл бұрын
@@nikitasafonkin3077 useRevalidate()
@xlebuwek1
@xlebuwek1 2 жыл бұрын
Add text 12:44
@vitmih380
@vitmih380 2 жыл бұрын
И что это дало? Лишь бы было.
@vo_skor
@vo_skor 2 жыл бұрын
Основой принцип реакта - декомпозиция. И когда встретишь это на проекте после чувака который любит декомпозировать декомпозированное, не потеряешься 😁
@everemchuk
@everemchuk 2 жыл бұрын
Ну это еще тот бубен. Ничего нового данные изменения не принесли, только опять проблемы с новой стандартизацией и структурой проекта. Как по мне ничего лучшего чем ReactQuery или же Redux + RTKQuery не придумали. Я думаю что в будущем данная фишка не получит своей популярности, и будет просто как заглушка в библиотеке
@sergeysharapov5945
@sergeysharapov5945 2 жыл бұрын
компонент уже стал каким то грязным и похоже на страницу php с ajax подгрузкой где нужно )
@lesters
@lesters 2 жыл бұрын
спасибо за актуальную инфу, скажи а почему ты не используешь стандартную запись export default ComponentName ?
@mishanep
@mishanep 2 жыл бұрын
Иногда использую и экспорт по умолчанию. Не согласен, что это стандартная запись. Многие библиотеки в качестве стандарта как раз используют именованный экспорт. Но для проекта это вопрос привычки и соглашений внутри команды.
@lesters
@lesters 2 жыл бұрын
ну и есть смысл убирать юзстейт и прочие для замены их на роутинг, он что жрет меньше памяти? или это просто альтернативный подход?
@mishanep
@mishanep 2 жыл бұрын
Здесь скорее история не про память, а про разные уровни абстракции. У нас, к сожалению или может быть к счастью, слишком много вариантов делания одного и того же. Касаемо производительности я не замерял, не отвечу. Но в теории должно быть быстрее.
@raufhashimov241
@raufhashimov241 2 жыл бұрын
Какой редактор?
@galibibr02
@galibibr02 Жыл бұрын
vs code
@СергейВер-и9ю
@СергейВер-и9ю 2 жыл бұрын
Берите на заметку классный хук, на подобии useFetch, который поддерживает параметры и гораздо легче всей этой дичи с React router. import {useCallback, useState} from 'react'; const useRequest = (promise: (...args: TParams) => Promise) => { const [data, setData] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const run = useCallback((...args: TParams) => { setData(null); setLoading(true); setError(null); promise(...args) .then((response) => { setData(response); setError(null); }) .catch((error: Error) => { setData(null); setError(error.message); }) .finally(() => { setLoading(false); }); }, [promise]); return {data, loading, error, run}; }; export default useRequest;
@worldandplanet8715
@worldandplanet8715 2 жыл бұрын
Спасибо, очень своевременное для меня видео)
ErrorElement для обработки ошибок в React приложении
14:18
Михаил Непомнящий
Рет қаралды 15 М.
Отправка данных через роутинг React router 6.4
25:08
Михаил Непомнящий
Рет қаралды 17 М.
The evil clown plays a prank on the angel
00:39
超人夫妇
Рет қаралды 53 МЛН
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН
99.9% IMPOSSIBLE
00:24
STORROR
Рет қаралды 31 МЛН
Новые хуки useTransition и useDeferredValue в React 18
22:17
Михаил Непомнящий
Рет қаралды 23 М.
GraphQL для фронтенд разработчиков
35:52
Михаил Непомнящий
Рет қаралды 49 М.
React Router - Complete Tutorial
23:53
Cosden Solutions
Рет қаралды 168 М.
Валерий Баранов - React Query в деле: как Яндекс Командировки уже три года живут без state-менеджера
47:58
Параметры в ссылках в React Router 6
11:40
Михаил Непомнящий
Рет қаралды 90 М.
Learn React Router v6 In 45 Minutes
46:20
Web Dev Simplified
Рет қаралды 582 М.
The evil clown plays a prank on the angel
00:39
超人夫妇
Рет қаралды 53 МЛН