useState в React не всегда нужен - query и server components в Nextjs

  Рет қаралды 4,576

PurpleSchool | Anton Larichev

PurpleSchool | Anton Larichev

Күн бұрын

Сегодня разберём на примере каталога курсов, почему местами плохо использовать useState и какие альтернативные пути работы с состояниям у нас есть.
🔗 Ссылки:
Репозиторий прокета: github.com/AlariCode/youtube-...
Про React 19: • React 19 - React Compi...
Видео про терминал MacOS: • Красивый терминал на M...
🎓 Курсы по разработке: purpleschool.ru
🎓 Курсы по React и Redux: purpleschool.ru/course/react-...
🎓 Курсы по Next: purpleschool.ru/course/nextjs
💬 Telegram канал с полезными советами:
t.me/purple_code_channel
Разделы видео:
0:00 - Введение
0:16 - Обзор проекта
2:40 - Реализация с useState
5:05 - Хранение состояния в URL
9:08 - Получение из URL
10:29 - Удаление useState
11:28 - Улучшение типизации
14:45 - Server components
18:27 - Заключение

Пікірлер: 25
@PurpleSchool
@PurpleSchool 22 күн бұрын
🔗 Ссылки: Репозиторий проекта github.com/AlariCode/youtube-state-demo Про React 19: kzfaq.info/get/bejne/oLWqdqRzp87KhHk.html Видео про терминал MacOS: kzfaq.info/get/bejne/pJlziryBrNC6nqc.html 🎓 Курсы по разработке: purpleschool.ru 🎓 Курсы по React и Redux: purpleschool.ru/course/react-redux 🎓 Курсы по Next: purpleschool.ru/course/nextjs 💬 Telegram канал с полезными советами: t.me/purple_code_channel
@andreyzhukov9134
@andreyzhukov9134 15 күн бұрын
Очень круто! Спасибо, за такой контент!
@PurpleSchool
@PurpleSchool 15 күн бұрын
Пожалуйста!
@BlueCell
@BlueCell 19 күн бұрын
Поскольку FE разработка движется активно в сторону server components, делайте больше таких видео. Спасибо
@PurpleSchool
@PurpleSchool 19 күн бұрын
Хорошо)
@user-gw8zk6xx5x
@user-gw8zk6xx5x 22 күн бұрын
Антон, привет 6:28 минута. "Обернем в useCallback для оптимизации". В данном случае для деоптимизации, у тебя в итоге просто так хук будет вызываться на каждый рендер т.к сохранение ссылки на ф-ию в зависимости от searchParams здесь вообще не нужно, оно не несет никакого смысла (Зачем ?) Так же: 1) Дублируются строчки при пробросе типа и направления в компоненты, можно было бы вынести в константы условия с оператором "??" 2) Когда перешли на серверные компоненты, то можно вынести query для href компонента Link в const переменную. P.S Но это уже мелочи по сравнению с useCallback
@PurpleSchool
@PurpleSchool 22 күн бұрын
Спасибо за дополнение
@dmitryrazdobudko4914
@dmitryrazdobudko4914 21 күн бұрын
конкретно тут можно createQueryString вынести за компонент, добавив seachParams третьим аргументом. И будет ещё лучше в плане оптимизации
@user-ik7rp8qz5g
@user-ik7rp8qz5g 21 күн бұрын
Проблема такого подхода в том, что теперь на каждое обновление фильтра делается запрос к серверу. Для огромных интернет магазинов это вполне нормально, но для маленьких сайтов, где весь контент загружается сразу, это неоправданное усложнение. Есть ли у этой задачи правильное решение - я не знаю. Пробовал несколько разных подходов, остановился на таком. Серверный компонент (страница) загружает исходные данные один раз и передает в клиентский компонент (фильтр + список). А на клиенте используется библиотека next-usequerystate (nuqs в новых версиях), которая обеспечивает синхронизацию кнопок фильтра с адресной строкой без перезагрузки страницы. Итог - статическая генерация с сохранением состояния в адресе.
@chirkov
@chirkov 18 күн бұрын
Как раз почти все интернет магазины так и работают: на любое обновление фильтра делается новый запрос к серверу и тоже самое по нажатию на кнопку пагинации
@funkjoker
@funkjoker 22 күн бұрын
Note to mention. Любое считывание searchParams в серверном компоненте автоматически делает рут динамическим. Ну должно, по крайней мере после того как ишью пофиксят с force-dynamic(или уже пофиксили) ну или это не partial prerendering
@PurpleSchool
@PurpleSchool 22 күн бұрын
👍
@Sylar7773
@Sylar7773 16 күн бұрын
Спасибо огромное, а можно исходники?
@PurpleSchool
@PurpleSchool 14 күн бұрын
Сделал репозиторий github.com/AlariCode/youtube-state-demo
@Sylar7773
@Sylar7773 14 күн бұрын
@@PurpleSchool Огромное Вам спасибо, хорошего дня)
@baileysli6235
@baileysli6235 22 күн бұрын
4:09 зачем ты делаешь обёртку над сеттером?
@PurpleSchool
@PurpleSchool 22 күн бұрын
Я просто заранее подготовил эти функции к демонстрации, так как дальше в них добавляется дополнительные строки кода
@io0312
@io0312 22 күн бұрын
Исходники можно ?
@PurpleSchool
@PurpleSchool 22 күн бұрын
Сделаю завтра отдельный репозиторий
@io0312
@io0312 22 күн бұрын
@@PurpleSchool буду благодарен если поделитесь ссылкой, просто чтобы посмотреть и потыкать код написанный вами
@Love-id8gu
@Love-id8gu 21 күн бұрын
@@PurpleSchool Привет. Тоже всегда хочется исходники. Прикладывайте к урокам. Спасибо!
@CJIu3eHb
@CJIu3eHb 19 күн бұрын
А вдруг фильтров много и у них длинные названия и/или значения и url в 2048 знаков не уложится? :)
@yumedzi
@yumedzi 22 күн бұрын
можно пожалуйста поменьше этих музыкальных переходов,слишком уж часто они происходят, слушая в наушниках,это начинает давить на мозги
@PurpleSchool
@PurpleSchool 21 күн бұрын
👍
Разбор Tanstack Router - убийца React Router
28:08
PurpleSchool | Anton Larichev
Рет қаралды 8 М.
Storybook - Быстрый курс по работе и тестированию с React
37:39
Watermelon Cat?! 🙀 #cat #cute #kitten
00:56
Stocat
Рет қаралды 7 МЛН
🍕Пиццерия FNAF в реальной жизни #shorts
00:41
1 класс vs 11 класс (неаккуратность)
01:00
NextJS 13. Использование клиентских компонентов
32:19
Михаил Непомнящий
Рет қаралды 36 М.
Prisma VS Drizzle in NextJS
7:27
Karthik Nooli
Рет қаралды 3,6 М.
ChatGPT4 Guide for developing your first code
7:41
Zenonblade
Рет қаралды 10 М.
Новые хуки для React 19 и другие фишки
18:01
Михаил Непомнящий
Рет қаралды 20 М.
"Проклятие 35 лет" в Программировании
8:04
Миша Ларченко
Рет қаралды 14 М.
Выжимка первого дня React Conf: Краткий обзор
8:59
React и Next js убивают фронтенд!
9:11
Миша Ларченко
Рет қаралды 42 М.
Как в 44 года стать программистом на Python. Объясняю с чего начать.
19:32
Watermelon Cat?! 🙀 #cat #cute #kitten
00:56
Stocat
Рет қаралды 7 МЛН