React JS c Нуля – ПОЛНЫЙ Курс для начинающих (2025)
4764 segments
[музыка]
дамы и господа Всех приветствую Меня
зовут владилен Минин и я уже в it больше
11 лет 7 лет из которых я преподаю
JavaScript а также являюсь сейчас
основателем онлайн университета result
University который полностью посвящён
именно качественному образованию по
front-end разработке и я решил что
русскому Ютубу не хватает хорошего
базового материала именно по react react
- это библиотека которая написана на
языке JavaScript которая позволяет как
знаете из строительных блоков строить
пользовательский интерфейс и это самое
популярное сейчас решение на рынке труда
то есть эта технология требуется для
того чтобы устроиться на работу её чаще
всего спрашивают и многие начинающие
сталкиваются с тем что есть
некачественные материалы А вот эти вот
большие школы Они продают всё это дорого
и там очень плохое качество Поэтому я
решил что это будет большой ролик
который позволит вам вообще с нуля без
каких-то начальных знаний Ну кроме там
JavaScript вы кстати тоже можете найти
его его на моём канале полностью
погрузиться в react и понять как эти
базы работают Вы можете оценить вообще
качество подачи материала и способ Да
которым я доношу информацию и Обучаю вас
потому что это как раз-таки и есть
демонстрация того подхода и принципа
которым мы пользуемся в res Out
University То есть все программы которые
вы видите в этом университете они
построены Вот примерно по такому
принципу что мы прямо наглядно
показываем вам как это работает Ну и
дальше Вы уже можете применять это на
практике у нас безусловно там сделан
полный акцент на том что вы 20% как бы
времени Учите теорию на небольших
роликах а не на этих трёхчасовой
материалах а потом значит вы практикуете
большую часть времени и вас сопровождают
опытные наставники мы отбираем только
лучших это midle ПС уровень то есть эти
опытные действующие специалисты они
напрямую передают вам знания и
сопровождают вас именно до результата а
результатом является устройство на
работу что касается вообще этого курса
Сейчас вы с нуля будете смотреть как
работает react как он устроен там как вы
можете начать свои Первые шаги в нём
делать И это безусловно не весь контент
который есть по реакту в описании к
этому ролику вы найдёте ссылку где я
приложил дополнительные материалы
которые позволят вам понять А что вообще
делать дальше с этими знаниями то есть
во-первых там вы найдёте полный roadmap
который показывает какие есть технологии
в самом реакте которые потом ещё нужно
будет доучиться какие есть сторонние
библиотеки и также там есть полный
список актуальных технологий по разным
направлениям там от стейт менеджмента до
тестирования который вы просто можете
забрать себе и изучать уже по этой
инструкции также в этой ссылки я заложил
ещё дополнительный контент который
показывает а с какими задачами Вы можете
столкнуться на реальной работе на уровне
midle june или june П И как эти задачи
можно решить с помощью react на этих
примерах я вам хочу показать что вас
ожидает на реальном рынке труда и что
вам нужно выучить для того чтобы эти
задачи решить контент очень полезный
поэтому вы можете бесплатно его забрать
и если вам понравится подход который я
даю в этом ролике если вам понравится
материал то будем рады пригласить вас на
платную программу которая уже
профессиональная даёт знания нужные для
устройства на работу а наш HR отдел
позволит вам комфортно устроиться на
работу или попасть в компании партнёры
поэтому я желаю вам успехов на этом
этапе впереди вас ждёт очень много
интересного и полезного контента
внимательно его изучайте Кстати да что
касается ещё рекомендаций по изучению
вначале вы смотрите а тот материал
который я даю и в идеале вам нужно не
просто смотреть А ещё ставить на паузу и
самому писать ручками чем больше вы
будете писать ручками и решать задач или
просто хотя бы знакомиться с синтаксисом
и понимать как это работает сами это
реализовывать результат от просмотра
этого видео будет колоссальным Поэтому
Ещё раз желаю вам успехов и Давайте
переходить к обучению Итак давайте
теперь разбираться с тем что же такое
react И для этого Я перешёл на
официальный сайт технологии это react то
DF Кстати это новый обновлённый сайт
потому что до этого он по-моему
находился на reactjs.org В общем это уже
устаревший считается документация на
этом сайте есть информация про то что
такое react как с ним работать что он из
себя представляет Ну то есть вы можете
полистать я вам естественно Всё буду
сейчас рассказывать и показывать
Единственное что вот на сайте мы видим
главное определение реакта и нам в базе
очень важно понимать что он из себя
представляет это кстати его логотип
часто вы его сможете встретить в общем
здесь написано что это библиотека для
веб-разработки и для разработке нативных
пользовательских интерфейсов значит если
немного расшифровать это определение то
в первую очередь мы видим что react -
это
библиотека которая кстати написана на
языке JavaScript и это большой его плюс
Кстати если вы вдруг не очень хорошо
понимаете JS сейчас будет
подсказок альный курс на момент конца
двадцать третьего года по JS очень
хорошей будет базой для этого ролика и в
общем разработчики берут JavaScript
разрабатывают набор инструментов которые
нам позволяют автоматизировать или
упростить разработку Ну непосредственно
там в данном случае веб интерфейсов
веб-интерфейс - это сайты любые сайты
причём которые вы видите в мобильных
устройствах браузерах и так далее ну и
также разработка нативных
пользовательских интерфейсов под этим
подразумевается что с помощью реакта Вы
можете разрабатывать мобильные
приложения есть такая технология как
react native которая берёт и там потом
партией в общем понимая Как работает вот
эта библиотека Вы можете делать
довольно-таки много с точки зрения
интерфейсов но Фишка в том что react как
раз-таки отвечает за визуализацию и как
Сейчас мы посмотрим он нам сильно
упрощает разработку и путём того что
react работает с компонентами по сути у
нас будет большое количество
строительных блоков с помощью которых мы
сможем создавать там сайты ну Правильнее
будет говорить интерфейсы всё-таки любой
сложности и вот на этом этапе Давайте
закончим с сайтом остальное будет всё в
практике на примерах Я бы хотел
показать один пример на котором вы
сможете понять В чём разница между
например использованием чистого
JavaScript Ну и непосредственно react
потому что тут JavaScript тут JavaScript
Зачем нам ещё что-то нужно делать И для
этого значит я написал очень простой
сайт Как видите дизайн потрясающий
абсолютно Ну даже анимации какие-то
добавил в общем смотрите да То есть
можно кликать
и показывается там новый контент в табе
то есть в целом сайт довольно-таки
простой но Давайте посмотрим как он
реализован а написал я его на чистом
JavaScript чит Т что нас здесь
интересует Ну это стили
неинтересно с точки зрения Бади вот у
нас присутствует пустой тег UL То есть
это весь контент нашего сайта потому что
всё остальное генерируется уже с помощью
JavaScript дальше Я создаю контент А ну
это просто массив И после этого Вот мне
необходимо получается взять пробежаться
по этому массиву вывести его в дом
дерева как я это делаю получаю контейнер
потом вызываю функцию render Content Ну
то есть я пробегаю по контенту Каждый
элемент преобразовывать в
строчку вот здесь обычная строчка с
элементом Le Ну и всё и дальше складываю
это всё в контейнер А для того чтобы всё
это было
кликабельно значит Я обращаюсь к
контейнеру добавляю ему слушатель Клик
дальше я проверяю вот таким вот ифом что
Клик был совершён по правильному месту
Да потому что там можно попасть не
только вли но и внутренние элементы
непосредственно самого списка и в случае
если вс-таки я попал по элементу ли
тогда я удаляю классы а классы удаляются
также через контейнер мы получаем все
элементы ли прибегаем и для каждого
элемента удаляем класс и собственно
говоря только после этого мы добавляем
уже активный класс да то есть за счёт
этого вот поется такой
эффект кстати Раз уж мы рассмотрели
javas как реализован то вот это подход
что на самом деле отличается от того что
мы видим в реакте Да но это такое
последовательное выполнение команд Окей
Теперь давайте покажу тоже самое на ре
опять же пока вы не будете там понимать
весь код для этого и есть этот курс
после этого вы сможете намного сложнее
вещи делать Вам будет всё понятно но в
общем и целом Вот как это выглядит то
есть абсолютно тотже самый
функционал умещается вот в 29 к здесь у
меня ушло Ну тут 991
минус 46 Можете посчитать Короче больше
тут Получилось Да по функционалу видите
что абсолютно тоже самое Ну кроме того
что я стилем поменял цвет синий Да и
если здесь разобрать что происходит есть
абсолютно тот же самый контент что и был
в JavaScript Но дальше идёт так
называемый уже декларативный подход
подход Код да который вы видите то есть
мы создаём некоторое состояние для того
какой элемент будет активным Мы также
делаем Map по аналогии с тем что было в
JavaScript вот мы выводим Ту же самую
структуру но только здесь мы уже не
мучаемся там с этими кликами мы сразу
говорим что конкретно Если по этому
элементу Бул Клик мы просто меняем
состояние а не меняем что-то в коде за
это как раз-таки отвечает react потому
что он сам по себе реактивный и в этом
заключается его фишка что мы Просто
описываем некоторые
состояния как здесь и меняя их react уже
за нас перерисовываю интерфейс то есть
мы думаем здесь про логику а не про то
как это ещё реализовать в JS Поэтому вот
такая вот Разница есть можете с этим
поиграться но опять же мы сейчас всё
поэтапно будем разбирать и вот на этом
этапе следующий момент который я бы
хотел вам
объяснить Это то а как вы можете
стартануть вообще с
приложением react новым И как вы можете
в общем начать на нём разрабатывать
потому что есть несколько способов
А смотрите первый самый простой Вы
можете в
а строчки поисковый запрос где делается
написать react New в любом браузере
кстати нажать Enter и вы автоматически
попадаете на кон Sandbox это такой
онлайн-редактор кода где
можно сразу же разрабатывать и за нас
генерируется вот такой вот базовый
проект на react Ну который вот если вы
зайдёте в систему вы сможете уже
как-нибудь там редактировать и управлять
всем
этим вот видите тут всё обновляется
показывается результат и так далее То
есть это самый простой способ Ну ко
опять же Это просто один из онлайн
редакторов кода который можно
использовать хорошо для прототипирования
или для практики какой-то но зачастую
вам потребуется всё-таки и будет удобнее
разрабатывать на react локально то есть
для этого я буду в этом курсе
использовать такой редактор кода как vs
код Вы можете его найти здесь
в по такому запросу и первая ссылка
ведёт на данный редактор кода можете его
скачать стабильную версию и всё у вас
будет примерно тоже самое что и у меня
опять же существует другие редакторы
Если вы пользовались там каким-нибудь
вебшторм например пожалуйста это
абсолютно будет подходить он тоже
прекрасно работает с react но я буду
показывать опять же вот на этом это
бесплатное
решение помимо этого также я хочу
предупредить
что дальше нам потребуется ещё такая
программа как not JS Если вы ещё не
установили её Зайдите на этот сайт как я
показал сейчас и установите Вот эту вот
рекомендованную для большинства
пользователей ве просто его скачиваете и
устанавливаете как обычную программу
этого будет достаточно после этого
откроете терминал в macos это терминал
называется там в Windows cmd по-моему
или Shell точно уже не помню но смысл в
том что одинаковые команды будут для
начала можете прописать Note - V вот у
меня восемнадцатая версия стоит нас
конкретно будет интересовать такая
утилита как npm пишете npm Window V если
выдаёт Всё круто можно продолжать ть
опять же на канале У меня есть вводный
курс быстрый по nots постараюсь его
приложить если что вы можете в поиске
его найти там прям пошагово подробно
тоже рассказываю как всё это устроено
Чтобы у вас было понимание как
разрабатывать классное приложение и
Теперь смотрите для того чтобы нам
локально развернуть какой-либо проект на
react в начале Нам нужно будет
определиться с папкой я с помощью
команды CD перейду в папочку vs код и
здесь у нас есть на самом деле два
способа создания реакта Ну из простых Я
имею в виду смотрите есть такая
технология которая называется Create
react App у неё тоже есть свой сайт
Create react updf здесь можно посмотреть
документацию тоже по технологии Как
стартануть с ней но в целом всё что нам
потребуется это прописать вот такую вот
команду npx Create react App My App
значит здесь Давайте только мы правим не
My допустим inro давайте так вот
inro Project это просто будет название
папки где будет храниться уже весь
проект который относится к react значит
что происходит здесь мы Обращаемся по
сути к пакету который
называется локально вле устанавливается
иже
зано про где мы сможем сразу же
разрабатывать на react там уже настроена
вся инфраструктура нам не нужно уже ни
про что думать мы просто садимся и пишем
код это довольно-таки удобная
фича сейчас мы его установим то есть по
факту сейчас идёт установка зависимости
для работы react там
всякие ну если вы работали до этого то
это называется папка НОД модуля В общем
для того чтобы поддерживать
инфраструктуру и смотрите мы можем
перейти
react int
Project и дальше нам необходимо открыть
Это в нашем редакторе то есть я могу
написать Вот так вот код Точка И это у
меня
открывает ВС код Ну либо просто там
нажимаете
файл открыть папку и ищете Где вы е
па sce то здесь как раз таки
присутствует вот
базовая потом разберусь что это такое А
там какие-то проблемы с Дена базовая
структура для
react Ну и в принципе всё для того чтобы
стартануть Вам необходимо прописать
команду Старт как это выглядит здесь
наверху есть кнопочка создать терминал
он создаётся прямо в папке Где мы
находимся и мы просто пишем
nm после этого открывается Local Host
3000 и мы попадаем на вот главную
страницу ВС которую можно редактировать
опять же сейчас не про это речь потому
что буду показывать всё
поэтапно чтобы остановить процесс
нажимаем Ctrl C Ну и всё
останавливается сразу же отвечу на
вопрос Зачем нам вообще какие-то вот эти
вот огромное количество зависимостей
какие-то библиотеки там модули и по
факту то что мы делаем называется ну
создание
инфраструктуры процесса есть один
нюанс который специфичен для реакта суть
заключается в том что вот у нас есть как
бы JavaScript
файлы там есть код JavaScript который
понимает браузер если мы посмотрим на
какой-нибудь react код то здесь вы
увидите кое-что необычное например Это
то что мы без каких-либо кавычек просто
пишем здесь HTML теги по факту мы
естественно в этом курсе разм Как это
работает я вам покажу что происходит
после билда буквально вот скоро уже
достаточно по курсу но суть в том что
такой синтаксис браузер не понимает и
для того чтобы всё это работало мы
вначале должны пропустить это через
инструменты которые в данном случае
предлагает например Create react и
только после этого уже как бы
скомпилированный код jav скриптовый
отдать браузеру чтобы он работал да но
вот вы должны понимать что вот это не
совсем JavaScript
подробности дальше так и это
спойлеры значит то что вас ждёт потом и
следующий покажу момент как можно
сгенерировать по-другому приложение
которое мы будем использовать в этом
курсе есть такая технология как вид
очень
быстрый инструмент для сборки проектов
Вот можете тоже про него почитать у
него шаблоны очень мощный и быстрый
инструмент и например мы здесь можем
работать с react или Rea typescript но
опять же это продвинутая уже тема про
неё подробнее в большой программе мы там
даём контент а потому что в рамках туба
сложно такое дать вот и всё что нам
необходимо сделать Мы также переходим в
консоль здесь я выйду на верхний уровень
и напишу
npm L кстати вот эта вот собака latest
это означает что Ну есть же разные
версии пакетов там технология же
обновляется Да её постоянно там допили
так вот мы говорим что здесь мы работаем
как бы с последней версией доступной всё
нажимаю
Enter нам говорят что нам необходимо
установить вид здесь я нажимаю
Yes Project name давайте мы назовём его
react
Intro и дальше стрелочками Мы выбираем
ну нас интересует в данном случае react
здесь смотрите мы не выбираем там
typescript или tyt сево мы выбираем
JavaScript просто здесь я нажимаю
Enter всё После этого мы переходим в
папку react Intro дальше очень важно
дальше мы делаем npm
install
inst для того чтобы установить список
зависимо Потому что если в случае
с сам для нас их ставил Здесь нам нужно
их вручную поставить Вот и давайте тоже
открою я его в ВС
коде здесь мы видим немножечко иную
структуру и файлы но при этом суть
остаётся той же самой то есть
присутствует вот этот App GSX уже опять
же все эти там вещи мы разберём с вами в
курсе Почему так как это всё работает
вот и
HTML с другой стороны опять же всё это
Рабочая история и нам чтобы запустить
Этот проект открываю консоль здесь и
пишу npm Run
Def открывается Loc Host
5173 перехожу видите выглядит это
немножечко иначе Вот Но зато кнопку
можно нажимать и она будет работать а
такая вот вводная получается значит
попрактиковаться
для проекта который подготовил чтобы
было ещ проще нам нужно переходить к
следующей теме но сейчас будет маленькая
презентация потому что нам необходимо
разобраться А что такое компоненты Итак
для того чтобы нам прям эффективно
приходить к основному контенту данного
курса в первую очередь необходимо
разобраться А что такое react компоненты
и это такой как бы философский базовый
подход у библиотеки потому что ВС на
самом деле в м строе на компонентах это
Ключевая его фишка поэтому очень важно
понимать что это такое и как оно
строится Итак что такое компоненты
Давайте сразу же разберём это на
практике значит я зашёл на сайт своего
университета и здесь на главной странице
выбрал те места которые вот по факту мы
разрабатываем как отдельные компоненты
то есть мы можем видеть что отдельный
компонент - это логотип каж ссылочка -
это тоже а какой-либо компонент Да они
одинаковые как бы но видите у них разные
составляющие здесь сейчас мы разберёмся
с этим есть кнопочка она это тоже
отдельный компонент текст заглавный Да
это тоже отдельный компонент Ну и
картинка с текстом это тоже отдельные
компоненты которые могут быть объединены
в другой компонент то есть по сути это
такой строительный блок для интерфейса И
как вы понимаете интерфейс можно
разделить на большое количество этих
строительных
блоков для того чтобы ими было проще
управлять то есть да я немного даже
опередил презентацию ведь действительно
что вам важно понимать Это маленькие
строительные блоки сайта значит какие
есть преимущество вот такого подхода да
Опять же как оппозиция есть например
Монолит Да когда мы всё пишем там в
одном JavaScript файле весь функционал
но с ростом объёма нашего приложения там
или его возможностей в файле становится
сложнее ориентироваться а вот у
компонентов есть определённые
преимущества во-первых они
переиспользовать Понятно В чём вообще
суть этого подхода дальше это разделение
и изоляция логики в этом курсе вы
поймёте подробнее в чём прикол вообще
этого подхода и почему он действительно
классный но смысл в том что мы дробим
как раз-таки вот следующая Да часть
проще разрабатывать Интерфейс Да мы
дробим получается вот какую-нибудь
большую задачу на
маленькие и точечно да разрабатываем
функционал для конкретного элемента
интерфейса и когда мы Вот решаем не
сразу же там задача всего сайта А
конкретно одного локального места это
конечно же намного проще с точки зрения
разработки И тем самым можно допускать
меньше ошибок быстрее разрабатывать и
так далее Вот ну как следствие проще
разрабатывать непосредственно с
использованием
компонентов следующий плюс это то что и
HTML и CSS и JavaScript Они лежат в
одном месте и то есть Представьте Да что
вот вы раздробили ваш сайт такие
маленькие как бы блоки и вам не нужно
там думать где CSS лежит там где
JavaScript вы просто переходите в нужный
необходимый блок быстренько его правите
с точки зрения стилей функционала или
структуры ВС у вас всё работает опять же
в этом вы сечас
Убедитесь соответственно последний плюс
основной - это то что компоненты на
самом деле используются сейчас везде
потому что вы можете встретить это в
других фреймворка таких как angular W
quid Solid там View
А вы сможете это использовать в
мобильной разработке потому что это
очень хорошая практика которая
действительно сейчас используется везде
при построения интерфейсов Теперь
смотрите что касается
зашёл в Яндекс музыку
и есть список треков Да которые у меня
там последние добавлены например И если
мы посмотрим внимательно с точки зрения
Вот именно разработчика фронтенд
разработчика сейчас на этот скриншот то
мы увидим не просто список треков а мы
увидим одинаковые компоненты Но вот я
красненьким подчеркнул верхние опять же
другие тоже относятся к этим компонентам
смысл здесь вот в чём то есть они
одинаковые по своей структуре то есть
видите есть картинка есть текст Есть ну
название трека Да есть автор есть к и
длительность Понятное дело что другой
трек он содержит себе другие данные
но у него точно такая же структура и на
самом деле мы же не будем вручную да
описывать там структуры для каждого
компонента Ну точнее для каждого трека
нет Мы один раз создали этот компонент и
Да передам в него памет того то есть
нужно ли нам отобразить буковку е или
нет но при этом структура вот для такого
компонента она у нас одинаковая и это
позволяет переиспользовать эти
компоненты один раз написав что
существенно упрощает разработку
интерфейсов для того чтобы вы заранее
понимали Примерно как это выглядит здесь
Кстати я показал Как выглядит
одновременно и JavaScript и CSS HTML вот
типичный react компонент это кстати
скриншот из курса Да который мы сейчас
будем проходить и
это простой код который Вы будете
понимать на самом деле там куда более
сложные вещи вот смотрите Да здесь идея
в том что есть CSS мы сразу же да задаём
стилистику для корневого элемента ли
есть JavaScript то есть мы сразу же
описываем какой-то функционал здесь и
есть HTML удобно удобно и Видите какой
маленький Это всего лишь элемент ли но
он при этом принимает параметры
ирисова примерно тоже самое что мы
только что видели с Яндекс
музыкой использование компонентов это
действительно позволяет разделить
интерфейс и намного проще
программировать функционал который от
вас
требуется как я и говорил да react
позволяет создавать
переиспользовать То есть Вам вручную
ничего не нужно будет делать это очень
очень удобно тоже Убедитесь Ну
собственно говоря это я уже перечислил
Да что Всё лежит в одном файле опять же
покажу множество подходов в том числе со
стилистикой это достаточно удобно сразу
же так вот программировать и конечно же
вы должны понимать что чем сложнее
объёмнее там больше будет проект который
вы разрабатываете тем больше и больше
будет виден плюс от использования
компонентов Ну потому что когда
маленький проект его можно просто
написать когда проект Большой там уже
можно легко запутаться Ну и собственно
говоря да Про это тоже уже говорю что
компоненты они используются и в
мобильных приложениях в даже нативной
разработке в том числе там iOS cotl А и
также компоненты используются в других
фреймворка кстати видео на них Вы тоже
можете найти на моём канале Ну ладно мы
сейчас про react короче я думаю что я
вас заинтересовал Я надеюсь что вам
понятно пока и Давайте посмотрим как это
работает на практики потому что впереди
очень много увлекательной и практичной
полезной информации Итак Теперь давайте
раз как же работают компоненты но только
на практике И сейчас мы с вами будем
писать уже полноценный сайт с
использованием
reacts в первую очередь вам необходимо
будет скачать Исходный код данного
проекта он называется 01 react bic
по-моему старт и здесь вы получите вот
такую структуру то есть распакуйте
откроете в коде эту папку и в первую
очередь нам потребуется установить
зависимость ч библиотек с помощью npm то
есть Я просто пишу Здесь npm inst также
и вы делаете Это в консоли и получаете
папку НОД модули и теперь наш проект
готов к работе Давайте сразу же на него
и посмотрим для этого я напишу команду
npm
Run всё это работает на вид То есть он
довольно-таки быстрый и теперь наш
проект доступен на Local
Host
[музыка]
5173 и здесь мы видим потрясающее
абсолютно приложение где написано Hello
react и больше ничего нет но во всяком
случае мы теперь видим что это запущено
И сейчас я хочу разобраться А как вообще
мы в браузере видим Вот эту вот строчку
Как это работает и связано вот с тем
кодом который сейчас есть у нас в
проекте Давайте разбираться У нас есть
папка Source и здесь мы видим Ну
некоторый набор файлов сейчас вот мы не
будем рассматривать Икс CSS и Data это
обычные JavaScript CSS они не относятся
к реакту и Давайте откроем fil main.go
здесь внимание присутствует такое
необычное довольно-таки расширения jsx
не просто GS с ним мы разберёмся немного
позже пока мы видим что здесь
присутствует Ну в принципе более-менее
похожий на JavaScript synxis но как
видите здесь нет никакой информации о
том как выглядит структура нашего
проекта там как HTML теги из этого
складываются То есть просто какой-то
функционал что-то происходит
знакомую штуку можно выпить
здесь можем даже вот
перенести назвать например это То есть
это просто обычный дом
элемент скопировать его и вставить сюда
да то есть так вот немного
[музыка]
декомпозиции на react на самом деле если
посмотреть на другую папочку
Public Прошу прощения не здесь вот он
индекс HTML в паблике если не с витом
создавать А с Create Rea тогда он там
будет в Вите индекс HTML лежит здесь
Давайте мы его откроем То есть это то
что открывается вообще в браузере и где
работает react и вот что мы здесь можем
наблюдать видим title Ну то есть в
принципе знакома HTML структура нам но в
ба также присутствует с ID Root и он
абсолютно пустой но теперь мы понимаем
что вот сюда получается этот элемент мы
забираем и что-то мы делаем дальше с до
он там какой-то OT создаёт И после этого
уже выводится вот э непонятная строчка
сейчас мы с ней разберёмся то есть вот
где будет
инициализировать приложение
виф рассматриваем больше в HTML ничего
нет то есть всё остальное будет
проходить именно в react отлично с этим
я думаю мы разобрались Теперь давайте
разбираться вот с этой строчкой здесь мы
делаем рендер и дальше присутствует
довольно-таки необычный Синтаксис это
как будто бы тег но неизвестный нам Да
он называется App мы его также
импортируем из App GSX если мы его
откроем то наконец-то мы добрались уже
до Ну чего-то понятного это HTML теги
правда Если разобраться сейчас то как
видите они также находятся у нас
в JavaScript в формате GSX То есть
сейчас мы про это поговорим но в любом
случае здесь мы видим структуру что всё
наше приложение - это div и в нём есть
заголовок H1 где написано Hell react
причём если мы добавим например что-то в
заголовок Я нажму сохранить и посмотрим
в браузере То мы видим что вот
появляется этот восклицательный знак
если мы проинспектируйте
вот у на получается есть с ID Root и
дальше то что мы видели в GSX примерно
так это работает то есть больше у нас
таких файлов сейчас нет И теперь
действительно Я хочу прокомментировать А
что это вообще за такой синтаксис потому
что в JavaScript мы не можем писать
просто теги и в действительности это и
не является тегами на самом деле это
специальный который есть в
который функциями которые заложены в
react но так как браузер не понимает
такой
синтаксис Для этого нам нужен bu процесс
то есть для этого у нас там вид сделан
другие сборщики которые на самом деле в
фоне анализирует что мы здесь написали и
дальше преобразовывает это уже в
какой-то код который будет понятен
браузеру и в процессе разработки
действительно если у на есть вот такой
мы его обозначаем с расширением GSX то
есть оно так и называется вот этот
синтаксис по факту это просто обычный
JavaScript Но вот эти теги Они сделаны
для удобства разработки чуть позже по
видео я покажу как на самом деле это
выглядит сейчас не хочу
проект то есть Вид всё это собрал и
дальше уже отобразил в браузере То что
ему Понятно Окей и Давайте попробуем
теперь с этим поработать То есть как я и
говорил до этого react - это библиотека
которая служит для более удобного
создания пользовательских интерфейсов
путём декомпозиции на вот эти вот разные
компоненты Ну и так называемые UI блоки
то есть р интерфейс какие-либо блоки и
соответственно мы можем создавать
какую-то более нежели там заголовок H1
поэтому Давайте попробуем как это мы
можем сделать например для этого сайта Я
хочу создать header Ну то есть
какую-нибудь шапку я в принципе могу так
и начать писать header дальше я нажимаю
Tab в ВС коде Да это просто превращает в
готовый тег Ну и здесь например
там можно написать скажем заголовок
H3 здесь я напишу
University это собственно говоря курс
часть программы из университета который
мы разрабатываем по фнн разработке Ну и
Давайте здесь будет какой-нибудь Спан
там сейчас напишем здесь просто временно
тут будет время забавно что я сказал
временно и про время то есть мы создаём
просто какую-то структуру Да всё это
отображая в нашем а
компоненте смотрим И за счёт того
что у нас прописаны некоторые стили мы
вдруг получаем уже
готовый они не идеальные но скоро мы со
всем этим разберёмся и в элементах Мы
видим что действительно вот теги которые
мы прописали То есть пока я думаю
разработка выглядит Ну довольно-таки
понятным образом Теперь давайте вот э
вот часть нашего приложения оберн в
[музыка]
г Ну и просто здесь будет лежать
заголовок H1 кстати Обратите внимание
что вот
сейчас
завода то есть форматирование не было
соблюдено при этом я нажимаю Command S и
Как видите автоматически у меня
форматирование
а встаёт правильно Да это работает
притер в vs коде То есть вы можете Если
вдруг у вас такого нет поставить это
расширение вот здесь в маркетплейсе
притир называется код
форматер так Main мы сделали Да теперь у
нас получается Чуть более красивые
приятные отступы Ну и всё наше
приложение начинает уже оживать
прекрасно
Однако Как вы понимаете Ну то есть
хранить всю структуру нашего приложения
в одном только компоненте пока это
функция Up Ну не очень удобно потому что
тогда у нас будет очень много кода мы не
сможем разобраться в чём прикол а как
раз-таки опять же react он про такую
молекулярность то есть про декомпозицию
про изоляцию Да различных компонентов и
на этом этапе Давайте разберёмся вот со
второй частью то есть Что происходит
вообще в этом файле У нас есть функция
обычная функция в javas кото что-то нам
возвращает и дальше мы её экспортируем
Кстати я не всегда люблю отдельно писать
такие экспорты мы можем здесь в одну
строчку написать и немножечко сократить
коды но по функционалу это одно и тоже
то есть мы её экспортируем и дальше в
мене мы её получаем и Теперь смотрите
это функция у нас и мы её Превращаем как
бы в г путём Ну добавления вот такого
синтаксиса с треугольными ско
то есть в реакте получается чтобы
создать компонент нужно создать просто
функцию дальше вернуть в этой функции
какой-то шаблон и получится компонент
Давайте попробуем значит для этого вот
например в данном случае мне кажется что
хедер отлично подходит под компонент
который куда-то можно вынести в
отдельное место он логически объединён
функционалом хедера и мне кажется это
правильно Я создаю функцию и здесь я
назову е с большой буквы header сейчас
мы поговорим про нейминг После этого мне
необходимо сделать Return я пишу круглые
скобочки и сюда Вставляю то есть вырезаю
весь этот шаблон и Вставляю сюда опять
же сохраняю видите форматирование У меня
сохраняется и всё хорошо Отлично Теперь
если мы посмотрим на наш проект Мы видим
что РТО у нас пропал Потому
что почему мы не использовали эту
функцию то есть мы её создали но никак
не вызвали и теперь нам нужно вставить
её в правильное место только теперь мы
уже знаем да что функцию нам нужно
превратить в тег поэтому здесь я пишу
header и всё сохраняю сразу же могу
сказать что вот в таких ситуациях можно
использовать сокращённую запись для
этого
тега ровно такие же правила как в
обычном HTML Так теперь давайте
посмотрим работает ли это да И как
Видите вот у нас прекрасно отобразил Р И
если мы посмотрим по структуре опять же
в элементах то есть вот есть этот div
дальше внутренний div дальше header идёт
и Main то есть вместо вот этого
компонента header который мы только что
создали вставляется просто его структура
Да и получается что на этапе разработки
мы вот так вот можем дробить эти
элементы и создавать структуру нашего
приложения теперь Пару слов про
правильный нейминг этих
компонентов смотрите их нужно называть с
большой буквы Это сигнал реакту того что
этот компонент не встроенный там в HTML
или ещё где-либо этот компонент мы
создавали сами поэтому первое самое
важное правило для названия компонентов
это то что они вот именно начинаются с
большой буквы Это позволяет в том числе
как бы вот ну не перепутать те теги
которые есть
встроенные и сразу же на этом этапе Я бы
хотел ещё поработать над структурой
потому что да Безусловно мы сейчас
создали отдельный компонент но он всё
ещё хранится в одном файле и менеджери
это довольно-таки сложно поэтому Давайте
Поработаем над архитектурой для этого я
создам папку в папочке Source Я назову
её
components и здесь я создам новый файл
который назову с большой буквы тоже
header
GSX ещё раз Почему GSX потому что в этом
файле мы используем вот специальный
синтаксис в
реакте так Эр Def мы сделаем да то есть
Нам необходимо экспортировать данный
компонент но при этом в некоторых
проектах вы всё равно можете встретить
такую ситуацию
что скажем файл Да в котором будет
прописан jsx будет с расширением JS Дело
в том что нет какого-то строгого
регламента потому что вот нужно
использовать такое расширение или такое
больше это сделано именно для удобства
разработки то есть вот мы сразу можем
понять что например вот в дате у нас нет
GSX Да потому что это GS а в хедере у
нас есть GSX но если мы даже назовём его
GS в принципе функционал вот этого не
изменится то есть в разных проектах
существуют разные
гайды смотрите дальше мы header
экспортировали теперь нам необходимо его
импортировать То есть я пишу и header
From
header Теперь давайте посмотрим да
Видите Всё у нас работает и вот в доме
мы получаем следующую структуру то есть
ничего не изменилось но теперь видите
из-за изоляции этих
компонентов очень просто смотреть какие
части мы можем изменить как они работают
и как ими управлять
Поэтому я думаю что со статикой мы
разобрались наверное ещё пару слов скажу
про вот эти вот
компоненты мы его используем
в
функци если мы возьмём и продублируйте
посмотрим Мы видим что мы просто
получили дополнительную структуру с
точки зрения хедера конечно Это
неправильно для приложения Да что у нас
несколько вот так вот идёт подряд но тем
не менее Смысл в том что теперь да когда
мы вынесли вообще функционал в отдельный
компонент мы можем использовать этот код
как захотим и где захотим И сколько
захотим и это как раз таки есть огромное
удобство в реакте потому что Теперь у
нас есть такой один строительный блок на
основе которого мы можем вот формировать
целый Ну целое приложение и
переиспользовать его поэтому сейчас мы
будем с этим тоже разбираться подробнее
естественно я удалю все эти лишние
компоненты И как я и говорил то есть
сейчас мы разобрались со статикой Да мы
поняли примерно пока базово как
формировать HTML А что насчёт динамики
как вообще выводить какие-то
динамические значения давайте для этого
Поработаем вфа то
GSX и вот у меня здесь есть Спан да
давайте здесь напишем
допустим
время Сейчас двоеточие и вот здесь вот
нам необходимо вывести Ну что-то
динамическое потому что время оно
постоянно меняется так вот в react есть
специальный синтаксис когда мы находимся
в
GSX здесь мы пишем фигурные скобочки И
на самом деле вот в них мы можем писать
уже любой JavaScript и он будет
интерпретироваться
ретом как что-то динамическое он будет
выводить его в итоге в шаблон то есть
здесь мы пишем то что можно привести к
строке например мы можем здесь сложить
скажем 21 п 21 Угадайте что получится ну
те кто давно смотрит мои ролики
поймут естественно мы здесь получаем 42
и вот на самом деле тут мы можем тепер
действительно попробовать выводить
вообще различные элементы там разли
сущности например деление
умножение какую-нибудь строчку написать
там например вот это вот Давайте лучше
другую например
Hello to upper Case Да мы получаем здесь
Hello то есть Поиграйте с этим поймите
Как это работает в принципе здесь нет
ничего сложного концепция в том что в
фигурных скобках у нас происходит
динамика и как следствие если мы хотим
получить время то мы можем создать
например
а константу Now равно New
Date Ну и сюда мы можем вывести
Now Однако если мы сейчас посмотрим мы
получим ошибку потому что мы передаём
сюда объект он по умолчанию не может
привести его к строке поэтому здесь
Давайте напишем to La Time
string обновляю страницу чтобы ушли эти
все ошибки Вуаля мы получаем текущее
время причём смотрите если я буду
ни то она будет показывать уже другое
время да потому что оно меняется то есть
мы разобрались как выводится здесь
динамика в реакте также я хочу сказать
что безусловно Вот эту вот константу мы
можем создать и внутри этой функции То
есть как бы изолировать тоже этот
функционал пока это база Но чуть позже я
покажу как работать именно уже
с меняющимися величинами более правильно
но тем не менее так може
делать Давайте разберёмся Как работать с
атрибутами потому что по сути Мы сейчас
что-то выводим в сам HTML но также есть
и второй способ вводить вот эту динамику
Давайте Я приведу пример с картинкой вот
у меня в папке Public и у вас тоже есть
лого name svg и мы хотим импортировать
эту картинку Причём я покажу как
правильно её импортировать и вывести вот
допустим вместо этого H3 то есть его я
закомментировать
Здорово что я это показал потому что
смотрите я нажал Command СШ и вот что
произошло то есть мы видите обернули
тоже как раз вот это вот фигурные
скобочки что говорит реакту о том что
дальше будет здесь динамика и просто как
обычный JavaScript мы закомментировать
картинки Мы можем написать следующим
образом
допустим я назову картинку
лого и дальше я говорю Откуда мы её
импортируем учитывая что она лежит в
папочке па то мы здесь ставим просто СШ
и пишем название того что нам нужно
сделать Log SG то есть по факту Мы
работаем с картинкой здесь как с обычным
JavaScript чтобы мы не думали где эта
картинка лежит какой у не правильный
путь когда наш проект будет собираться
он правильно поставили сюда название
файла его путь и всё нам не нужно будет
с этим заморачиваться то есть а с точки
зрения разработки видите довольно-таки
удобно получается и дальше Вот у меня
будет тег Image соответственно вот это
вот мне нужно положить в атрибут Source
и для того чтобы это было динамично Да
потому что мы не можем так вот написать
это будет неправильная картинка Вот то
есть видите тут ошибки должны быть мы
собственно говоря сделаем то же самое то
есть мы в качестве значения для этого
атрибута передаём фигурные скобки и сюда
указываем уже просто лого Теперь если мы
посмотрим всё наша картинка подгрузило И
теперь мы можем уже с ней работать она
нам украшает сайт что касается Альта то
смотрите тоже немного поиграемся с этим
мы можем просто написать здесь
а какой-то альтернативный текст и мы
абсолютно можем использовать это всё в
двойных кабы как мы это делаем в обычном
HTML но вдруг если скажем вот это вот
значение у нас будет
храниться в строчке Да и нам нужно его
вывести то мы абсолютно также можем
сделать вывести сюда строчку либо таким
образом либо вот таким вот образом то
есть так как опять же это лежит уже
внутри фигурных скобок то мы здесь
описываем JavaScript поэтому здесь мы
уже используем эти кавычки вот есть уть
этот момент сечас посмотрим видите
Отт Теперь давайте разберёмся Как мы
можем переиспользовать различные
компоненты и передавать в них параметры
потому что опять же сейчас мы просто
обозначили Куда нужно вставить компонент
но никак с ним не взаимодействуем для
этого немножечко поправим структуру если
я добавлю SE з есть у меня будет
заголовок H3 здес напишу наш подход к
обучению Я честно говоря возьму сайт
своего университета и просто возьму
отсюда
информацию Ну вот отсюда будем брать да
то есть мы поговорим про наш подход к
обучению отсюда будет проще копировать
Итак Теперь давайте разработаем
какую-нибудь структуру например Здесь я
создам список у дальше будет
ли в ли я создам параграф P и вот у меня
здесь будет уже информация вначале будет
что-то в ге Ну и потом просто я буду
описывать текст вот таким вот образом
скажем фильтрация информационных
технологий информации и
технологий Ну я сейчас думаю про то как
про react рассказывать поэтому не сильно
читаю Да больше сосредоточен на
правильного донесение
информации дальше мы можем это
скопировать сейчас я поясню зачем мы всё
это
делаем вставим сюда формат
обучения
это кстати абсолютная
правда так ну и Давайте посмотрим как
это выглядит Вот то есть есть уже тоже
базовая вёрстка благодаря тому что мы
стили описали но теперь мы видим
очевидную проблему Что кода получается
довольно-таки много и он дублирует себя
Потому что Обратите внимание у этого
списка одинаковая абсолютно
структура корневой тегли есть параграф
есть тег STR только
вот данные внутри каждого из этих
элементов списка они отличаются то есть
на самом деле вот это вот чистый
компонент Да который мы как раз-таки
можем вынести и сделать его
универсальным для того чтобы сократить и
упростить нам работу а я создам
отдельную функцию которую назову
например Way To
teach у нас будет функция и здесь Я буду
что-то возвращать в круглых скобках
давайте мы возьмём тут структуру
скопирую и вставлю
сюда и мы уже знаем что теперь вместо
того чтобы описывать вообще
а каждый компонент мы можем превратить
наш компонент именно в ТГ да то есть
ставить его например три
раза если мы сейчас посмотрим то мы
получаем уже три компонента всё клёво
работает с точки зрения вёрстки Вот
только
одна и таже потому что мы пока е не
передавали дополнительных параметров Ну
и никак их не обрабатываем поэтому здесь
выводится статика на самом деле для того
чтобы нам взять данные Я подготовил этот
файл dats и здесь видите есть
именованный экспорт константы вот как
раз-таки ну это массив Да который
содержит в себе объекты у него два
свойст ко мы толь чтоли
и их немножечко больше Поэтому Давайте
просто мы возьмём этот массив
импортируем сейчас
ВТО
GSX импортируем что-то из Data и нас
интересует W то есть опять же Это просто
массив И
теперь как мы передаём параметры в
компонент на самом деле мы просто
придумываем какое-то название как будто
бы это атрибут Ну непосредственно для
этого тега только
комн на Ну например
и давайте пока временно со статикой
поработаем потом перейдём уже к дате
например напишу
11 и дальше передам Деп вот эти вот
названия я сам придумываю
сейчас Деп будет 222 Ну например в таком
формате А здесь давайте так вот сделаем
чтобы нам просто было проще это
вть есть я переда
эмет
в обк который называется опять же
технически Вы можете называть эту штуку
как угодно Хоть даже таким образом
просто это прям конкретное название из
самого реакта которые постоянно
используется поэтому Ну обычно вы
увидите вот такую запись это у нас
Объект который содержит в себе вот эти
вот ключи tle и des в этом мы можем
очень легко убедиться
вы рас прилетает объект А title
description ну и второй раз вызывается
уже с другим параметром соответственно
если например я здесь передам ещё
что-нибудь там скажем тест и например 42
то в первом концу и логе одну лю
страницу видите Мы также ещё получаем
здесь тест и Обратите внимание что оно
уже интерпретируется именно Как число да
то есть это вот к вопросу о передаче
параметрах в данном же случае это просто
строчки
вот естественно нам здесь тест не нужен
Но в любом случае вот мы уже можем как
бы получать эти пропсы то есть
сокращённо от
свойства и теперь мы можем их вывести то
есть вместо теперь этого статики я
выведу здесь props title а вместо этого
текста я выведу props то
description и теперь если мы посмотрим
мы получаем
динамический контент для данной страницы
то есть примерно Вот такая логика Как
это работает Давайте теперь выведем все
элементы из
массива их кстати четыре штуки 1 2 3 4
да то есть Четыре элемента должно
быть теперь вместо вот этой вот строчки
мы сюда выводим дата Обращаемся к
первому массиву то есть по нулевому
индексу Ну и точка tle здесь мы будем
выводить
description Ну и теперь мы можем просто
взять это и
[музыка]
продублировать только здесь мы меняем
индекс на
первый и у нас ещё есть два элемента
поэтому их тоже добавим то есть меняем
только
индексы дата 2 и дата
3 Так здесь у нас есть ошибка по той
причине что у нас называется не а Да
нужно было быть внимательнее
мне так сохраню обновлю страницу ошибок
больше нет и смотрите у нас получается
уже красивая вёрстка с необходимой
информацией и при этом мы знаем что
именно внутри самого реакта мы сделали
Всё это динамически то есть выглядит это
довольно-таки круто Однако здесь я хочу
обратить Ваше внимание что мы сейчас
довольно-таки много дублируем кода а то
есть Tile там tle дублируется
description и на самом деле есть Для
таких случаев более удобный способ
смотрите Да потому что в массиве Ways У
нас есть ключ title и description и
компонент Как раз-таки принимает title и
description то есть для того чтобы
упростить нам код мы можем вместо этого
написать таким образом здесь мы вводим
как бы динамику сами по себе и дальше с
помощью оператора spread мы Обращаемся к
waye Ну и в общем к
тому объекту который мы как бы хотим
развернуть и передать эти параметры
Теперь
смотрите я просто возьму
продублируйте
я оставлю эту запись но мы также можем
здесь написать там типа СД
и нулевой элемент просто вот э Вот
запись и вот э Вот запись в данном
случае она идентична мы в этом тоже
легко можем убедиться если Перезагрузи
страницу видите в ИО у нас здесь
выводится и также очень часто в
приложениях вы встретите следующую
запись то есть не обязательно обращаться
непосредственно сразу
к Мы можем с помощью такого синтаксиса
Это
называется как бы мы знаем что мы
принимаем здесь объект Поэтому мы можем
обратиться к конкретным полям которые мы
здесь хотим получить это у нас title
ИП
в самом компоненте теперь
становится более лаконичная и приятная
если мы посмотрим то как видите Всё у
нас работает то есть таким образом
выстраивается именно вот базовое
взаимодействие компонентов куда мы можем
передавать параметры на этом этапе
давайте мы сделаем теперь правильно и я
создам отдельный файл для этого
компонента Way To teach то
GSX сюда я Перенесу весь этот код только
буду его
экспортировать и в App Мы просто его
импортируем Да смотрим всё работает но
опять же теперь код этого компонента
находится в отдельном месте
и мы можем как бы если захотим точечно
его
исправлять Теперь давайте разберём
следующий функционал для этого я добавлю
немножечко вёрстки в наш главный
компонент там добавлю отдельный сек
здесь у меня будет за головок H3 опять
же я с сайта
возьму Вот чем Мы отличаемся от других
текст
будет и дальше Я хочу здесь показывать
там несколько блоков но для этого мне
потребуется такая отдельная кнопка
которую я хочу использовать дальше в
нашем проекте и я хочу чтобы это был
кастомный компонент кам Это значит что
мы сами его создам и это очень часто
используемая практика именно в react
когда мы выносим по сути вот функционал
для какого-либо компонента например
кнопочки в отдельный компонент чтобы он
был универсальный для нашего проекта и
им было удобно использовать Ани каждый
раз там прописывают какие-нибудь классы
функционал и прочее поэтому я создам
новый файл назову его с большой буквы
Button GSX если я буду
экспортировать по
дефолту функцию
опять же пишу с большой буквы То есть
это интерпретирует как именно наша
кнопочка и дальше я верну buton кстати
если это всё пишется в одну строчку то
круглую скоки писать необязательно Ну и
пока я здесь напишу
Клик дальше импортируют
компонент Если вы это слышали то там
соседи что-то делают наверху В
воскресенье ь наверно не знаю
и react здесь я как бы создаю Button
передаю его в шаблон Да если мы сейчас
посмотрим то вот у нас кнопочка есть
супер базовая но во всяком случае если
мы её опять же
проинспектируйте
О'кей А сейчас мы поговорим про
функционал потому что очевидно что
кнопочки нужны для того чтобы по ним
кликать Но мне бы хотелось чтобы она
была красивая для нашего проекта то есть
её нужно стилизовать
и сейчас в нашем проекте стили прописаны
очень просто они есть только в файле
index.css Ну я совсем базу написал здесь
импортируют работа для хедера какие-то
базовые стили добавил Для мейна Ну и там
чуть позже Да мы с вами разберём Но для
кнопочки здесь как бы ничего нет кстати
как вообще почему работает этот индекс
CSS потому что в main.js видите мы его
импортируем отдельно То есть когда
стартует наш проект мы
добавляем стили И поэтому они
считываются то есть мы тоже их как бы
как JavaScript рассматриваем смотрите
для того чтобы изолировать стили потому
что сейчас я буду их писать только для
компонента buton Я конечно же могу их
написать в икс CSS но правильно будет
если я напишу их в отдельном CSS файле
который предназначен исключительно для
нужного нам компонента Давайте покажу
как это делается сполер очень
просто CSS компонента Ну и здесь буду
уже описывать стили и дальше в этом
GSX я должен их
импортировать Button CSS Потому что если
я их не импортируют существовать но он
не будет работать Я думаю что с этим
понятно теперь в Button CSS я немного
срю я добавлю уже готовый код но оставлю
немножечко экран чтобы вы смогли его
перепечатать по Су задаю кае стилистики
для класса Button для Хара добавляю и
видите ещё есть активное состояние
кнопки То есть если мы добавляем клас
Active вот очень простые стили с точки
зрения функционала этого ролика оно нам
не повлияет но можете просто переписать
и теперь если мы посмотрим Я обновлю
страницу то стилей всё ещё нет а потому
что у нас всё это работает через классы
класс Мы не добавили для кнопочки то
есть для этого здесь нам нужно написать
класс и тут тоже есть следующая
особенность в реакте которую просто
нужно запомнить если мы хотим задать
атрибут CSS атрибут класс то мы
используем не ключевое слово класс как в
HTML А мы используем кла name причём
именно вот в кейсе Ну Дело в том что в
JavaScript присутствует ключевое слово
класс и так как здесь мы на самом деле
находимся не в HTML Мы здесь находимся в
JavaScript будет коллизия определённая
Поэтому в GS Мы всегда прописываем
именно но это тоже самое что и класс да
то есть сюда мы добавляем
buton и видите Всё теперь Ну я не скажу
что это самая красивая кнопка но она во
всяком случае есть то есть наши стили
успешно
сработали дальше
смотрите следующий такой момент есть
архитектурный архитектура - это способ
по сути построение структуры вашего
проекта чтобы потом было гибко и удобно
во всём этом
разбираться будет Неправильно если мы
будем так вот плодить вот эти вот
сущности там CSS GSX Представьте Да если
у нас будет 100 компонентов у каждого
компонента будет по CSS файлу мы просто
потеряемся здесь Поэтому правильно будет
если у нас есть какая-то группа создать
новую папку Я назову её по имени
компонента Button и в неё я Перенесу все
сущности
так нет здесь наж кнопочку Нет сейчас
всё вручную сделаю то есть видите теперь
уже получается у меня отдель папка под
компонент и Здесь есть всё что ну
относится непосредственно к нему
проверяем импорты то есть здесь у нас
относительный импорт Всё окей и дальше
ВТО GSX нам также необходимо поправить
этот импорт то есть Пока У нас компонент
отсутствует потому что мы перенесли его
в папку Так что здесь прописываем ещё
раз ба проверяем Да всё хорошо Супер
Теперь значит смотрите Мы создали Вот
эту вот кнопочку но Понятное дело что мы
не хотим постоянно выводить здесь текст
клик Ну вот условно я ещё раз выведу
кнопку она постоянно будет выводиться
Клик да то есть мы как-то хотим
кастомизировать вообще вот это вот текст
который в самой кнопке будет передавать
её как
параметр смотрите мы знаем один способ
Например я могу здесь передать параметр
текст Ну и там пока временно
будет А сюда Давайте передадим текст БА
2 опять же пока Если я обновлю страницу
ничего не изменилось потому что мы не
принимаем эти параметры но мы знаем что
сейчас сюда попадает некоторый текст и
вот мы его можем вывести то есть мы
можем спокойно это сделать Как видите
всё это успешно работает знаем это
способно иго спосо
в случае он будет более правильный
потому
что для этих параметров мы сюда другой
функционал будем передавать Я бы хотел
воспользоваться этим компонентом как
обычным HTML
тегом то есть Пусть он будет
закрывающимся и кнопочку точнее текст
для этой кнопки передавать между как для
как и в обычном HTML допустим первая
кнопка у меня будет
подход будет ещё две
кнопки
доступность и
концентрация пока мы такой способ не
разбирали если мы посмотрим то как
видите сейчас у нас текст отсутствует
потому что параметр мы не передаём и в
react Чтобы принять вот этот параметр
существует специальный прос который
называется
Children мы его явно не передаём но в
действительности Да когда мы передам
что-то вот внутри этого компонента оно
попадает ВС
В данный про если мы сейчас это всё
выведем то как видите у нас всё это
успешно получилось то есть это просто
другой способ передачи этих параметров и
он нужен для того чтобы ну вот именно
так описывать сам компонент при этом
сразу же забегая немного вперёд мы можем
здесь писа не только просто текст мы
можем зде
описывать
Спан
передать в спане там будет не знаю
заголовок H3 какой-нибудь здесь будет Ну
я сейчас как бы не то пишу что
соответствует здравой логике создания
приложений Но это нужно только для
демонстрации то есть видите более
сложную структуру какую-то я сюда
передаю Ну и в теории Вот видите мы
получаем эту кнопку она абсолютно
неправильно
эме успешно также вставляет То есть это
вот можно использовать мы естественно
делать так не будем там по-моему у нас
была доступность пусть она и остаётся а
подход что ж идём дальше теперь
поработаем с самой кнопкой потому что
кнопка которая не умеет обрабатывать
Клик бесполезная кнопка Значит мы хотим
сейчас чтобы при клике что-то
происходило и вот в обычном значит
JavaScript как мы делаем там мы пишем
doc
But потом там L Ну и так далее вы это
уже Я думаю Знаете в реакте всего этого
делать не нужно всё намного проще мы
добавляем специальный как бы атрибут Ну
в действительности это параметр для вот
этого компонента встроенного в
react этоша собы тое
с
ви
ско вообще Т присутствует различных
событий вариаций того что можно сделать
Ну по сути вот все события которые есть
в браузере в
JavaScript самые базовые который нас
интересует - это конечно же клик и здесь
мы можем уже создать какой-либо
функционал значит для этого я создам
отдельную функцию Ну вот Обычно она
называется мы называем handle cck
естественно называть её Вы можете
абсолютно как угодно но как бы
получается такая логика что здесь мы
добавляем слушатель при клике будет
выполняться функция которая в общем
ответственно за выполнение клика здесь
пока мы напишем cons Log
допустим Button
clicked и смотрите очень важный момент
эту функцию я передаю сюда в onclick но
не вызываю её это будет не правильно
потому что она сразу же один раз вызове
В такой момент и Клик больше работать не
будет То есть если мы хотим чтобы эта
функция работала только непосредственно
в момент клика то мы её передаём как
референс без
вызова
сохраню так и Теперь смотрите я нажимаю
и Как видите мы получаем действительно
вот этот вот консоль Лог при нажатии на
каждую из кнопок это успешно
работает Ну и уже первый интерактив есть
Ну как пример я также могу ещё вам
привести что мы можем добавлять
множество слушателей там на один из
элементов
скажем какой-нибудь возьму on Mouse
Enter Да например
handle Mouse
Enter кстати раз уж я показываю другую
функцию то мы можем создавать её
действительно и другим способом как
стрелочку функцию например в данном
случае нет никакой разницы только лишь в
синтаксисе Ну и здесь там напишу
например
Log
entered так
Смотрим смотрите теперь видите при
наведении у меня получается вот этот
enter то есть и вы можете посмотреть там
поиграться тоже Какие а слушатели
событий вы бы хотели добавить для
элементов там типа даблклик там правая
кнопка и прочее всё это вот работает
непосредственно с помощью такой логики
нам это не нужно Ну конкретно вот Mouse
Enter и так далее Короче я это всё удалю
а мы пойдём именно с кликом но концепция
добавления именно слушателей Такова Хотя
знаете правильно будет отметить
что есть ещё и другой синтаксис который
Вы наверняка встретите Мы тоже будем его
использовать давайте я в общем
продемонстрирую на примере даблклика
например
как это работает то есть мы можем ещё и
внутреннюю функцию здесь писать не
отдельно выносить там в константу или
функцию А как речную использовать таким
вот образом Sol
Log
dou то есть мы её можем так уже здесь
описать Ну и теперь просто проверим да
то есть если я два раза кликаю видите
два раза вызывается клик и потом один
раз вызывается Double то есть эта штука
тоже работает ошибки не смотрите Ани от
прошлого остались вот то есть это ещё
Илай
способ работы с функциями Ну и
естественно последний комментарий в этом
файле в том что ну точнее на этой теме в
том что да Безусловно мы находимся в в
функции сейчас по факту но внутри мы
создаём другие функции так вот в
JavaScript это абсолютно нормально и в
при работе с react вы постоянно будете с
этим сталкиваться Просто эта функция она
изолирована областью видимости только
этой функции и доступна только внутри
неё теперь говоря о самих кликах и
функционале смотрите А да Безусловно мы
сейчас обработали сам Клик Но что я хочу
сделать с этими кнопками Я хочу чтобы
это у меня работало как табы То есть я
нажимал на конкретную кно и у меня
показывался соответствующий контент Ну
какой-то
текст соответственно нам нужно понимать
а по какой кнопке мы кликали не просто
вот этот консоль получать а конкретную
какую-то информацию отсюда доставать и
правильно это будет сделать именно в App
GSX потому что здесь мы вызываем этот
компонент здесь у нас будет храниться
логика относительно того какой контент
показывать Потому что сама кнопочка про
это не знает
обрабатывать это Клик именно
в Ну смотрите пока логика такая же то
есть Я создаю просто обычную функцию там
назову
её параметры нам не нужны пока я напишу
здесь тоже самое то
есть И вот этот Hand Мы
[музыка]
хотим
значит это мы убираем Да потому что он
нам здесь не
нужен и в действительности нам всё равно
вед нужно как-то обрабатывать вот этот
вот оклик но мы можем передавать функцию
как параметр от родительского элемента
до дочернего в данном случае
родительским является jsx и отсюда мы
передадим параметр вот эту функцию и
пусть она уже
обрабатывается есть это называтся переда
имен и Давайте придумаем название для
этой кнопки ой точнее для этого
события
допустим удивитесь но можно его назвать
оклик опять же это параметр А это
атрибут который позволяет Добавить
события то есть вот этот вот онклик вы
часто увидите именно такое название но
его можно там назвать о tch например или
одем что называть этот параметр можно
абсолютно как угодно и вот мы его
передаём вот этот параметр как функцию
как референс в онклик это
зарезервированное название это название
мы придумаем самостоятельно Я надеюсь
это будет понятно но всё-таки я назову
это
Оли И сейчас я объясню почему потому что
это просто интуитивно будет понятно да
что вот у нас есть кнопка и мы не
придумываем какой-то сторонний параметр
со сторонним названием замыслова нет мы
просто
пишем и просто это мы знаем что наш
компонент у которого там своя Логика
есть и сюда мы уже передаём этот
Клик всё сохранили Обратите внимание что
в батоне у нас нет больше никакого
функционала но при этом если мы
обновляем страницу мы всё равно получаем
buton cck пока нам сильно это не помогло
ещё ну потому что мы не определяли по
какой кнопке мы кликаем но в любом
случае знаем что ври мы это
Поли
Перед тем как мы пойм
дальше у кнопочки с точки зрения C есть
ещ
класс который вот выглядит Именно таким
образом вы вот на текущем этапе в
качестве такой небольшой самостоятельной
работы можете попробовать добавлять этот
класс как параметр То есть вы будете
передавать какой-то параметр из батона и
случае есно будет
авре
пока я оставлю чтобы ну просто
по-другому как бы выглядел у нас
экран Окей значит смотрите дальше нам
нужно понять А по какой кнопке Мы в
итоге кликаем Потому что сейчас у нас ну
постоянно один и тот же
текст оказывается в консоли и для того
чтобы вот при клике передавать в эту
функцию параметр который у нам уже будет
сигнализировать о том куда мы нажимаем
мы можем сделать следующим образом то
есть мы знаем что паме
функцию А что если мы сюда и передадим
эту функцию таким вот образом вы очень
часто будете встречать именно такой
паттерн в реакте да то есть мы формируем
замыкание в данном случае и здесь уже Мы
можем вызвать эту функцию с
фиксированным параметром Давайте
посмотрим как они называются у нас что
мы сечас этим
поработаем E и
PR знат сюда мы будем
передавать
у нас
будет
Easy и
Program Давайте посмотрим работает ли
это да Видите мы нажимаем и оно всё ещё
работает но нет этого параметра потому
что мы его передали в саму функцию но
никак не обработали то есть здесь я
назову его например Type и дальше уже
буду его сюда
выводить обновляю страницу и видите Да
теперь кликая по одной из этих кнопок мы
чётко понимаем какого она была типа
опять же вы сюда можете передавать любые
параметры Ну просто для текущей задачи у
нас здесь была именно строчка это могут
быть там объекты массивы числа и так
далее дальше Вот мы получаем уже Тип и
теперь давайте вот выведем ну
какой-нибудь контент в зависимости от
типа кнопки на которые мы нажали для
этого значит после батонов я добавлю
параграф п я напишу Нажми на
кнопку и значит Ну как мы можем сделать
А давайте подумаем я могу создать
например какой-нибудь Let Content да
пусть он будет в
начале так и называться Нажми на
кнопку да Опять же мы этот контент можно
спокойно вывести вот таким вот образом и
видите у нас всё это успешно работает да
то есть вот он
показывается и в случае Например если
мы кликнули на кнопочку нашу Давайте
этому контенту мы
присвоить он выводится то есть мы знаем
что Тап меняется поэтому поменяли
контент Ну и всё он будет Значит у нас
рендерится такой пла нажимаю на
доступность вот мы получаем здесь а Easy
там Program Way а кнопочка точнее текст
не меняется что-то пошло не так и здесь
мы подошли на самом деле к одной из прям
ключевых фундаментальных концепций в
реакте которая называется State и вот в
чём заключается идея
react он реактивный ну даже по названию
Вы можете посуди То есть он
автоматически следит за каким-то
изменением которые происходят в коде
если это как-то влияет на изменение
шаблона то он берёт и перерисовываю
конкретное место в шаблоне таким образом
его
оптимизируя но что пошло не так потому
что в целом-то вот мы изменили как бы
константу точнее переменную а он её
почему-то не изменил в шаблоне так вот а
в реакте для того чтобы он понимал Зачем
нужно следить а зачем не нужно следить
есть такое понятие как й то есть
состояние вашего там приложения
компоненты и так далее
и мы должны сами вручную сигнализировать
реакту о том что является стейтон А что
является Ну просто какой-то статикой и в
случае если это у нас состояние то тогда
реакт будет это всё перерисовывать если
это не состояние то он просто это про
игнорирует и
способ с помощью которого мы можем
создавать это состояние я вам сейчас
покажу Но прежде давайте мы ещё сделаем
следующий момент то есть по дебажить
немножечко здес я напишу а cons Log Up
допустим Up
component
render и Давайте посмотрим когда этот
рендер вызывается то есть ну рендер -
это помещение по сути вот этого GSX
прямо в шаблон я обновляю страницу и
Видите вот у меня один раз он вызывается
если я нажимаю на кнопочки кнопочки они
как бы нажимают
есть то что я и говорил как ки состояние
мы не обозначили поэтому ре его и
игнорирует при этом кстати вот у нас
есть внутренние компоненты
скажем Да мы же здесь тоже можем
написать
buter видите он три раза у нас как бы
рендерится
ного
проходит react не перерисовываю э всю
историю она статическая остаётся сейчас
так что теперь поговорим про то как мы
правильно работаем со стей в
реакте для этого я
импортируют и это что-то называется
use State значит US State - это функция
и она начинается со специального такого
префикса use что сигнализирует нам о том
что это
к с помощью которого мы можем создавать
локальное состояние для
компонента Сейчас я вам покажу как это
работает
значит в самом App компоненте мы
вызываем эту функцию use State
и здесь на самом деле не принципиально
что мы получим из этого тейта ну в том
плане это будет констант или LED Мы
всегда получаем один и тот же
формат допустим State
я его назову это у нас всегда будет
некоторый массив значит Перед тем как мы
будем разбирать что это такое Как это
работает сразу же несколько обязательных
правил по использованию вот
этого стейта ну и вообще хуков в реакте
Первое правило нельзя писать их вне
компонента Вот например как здесь это
будет ошибкой то есть мы используем вот
эти вот хуки в данном случае только
внутри опонента либо другого хука но
опять же пока не берите в голову Просто
дело в том что мы можем самостоятельно
создавать некоторые хуки про это мы вот
подробно рассказываем там уже в большом
курсе да где не для начинающих потому
что это более-менее продвинутая тема но
опять же То есть сейчас что вам нужно
запомнить usate мы используем а внутри
компоненты и он всегда должен находиться
на Верхнем уровне то есть ну нельзя
скажем написать там типа If 1 1 ра 2
неважно И какой-то да и вот если так то
тогда мы создадим стоит ошибка Нельзя
так делать никаких иов То есть если мы
используем вот эти вот й то только на
Верхнем уровне теперь что касается вот
этого State Давайте пока для начала сюда
я передам
42 ладно не 42 пусть будет будет текст
Нажми на ноп и Давайте посмотрим что
есть
если мы Ну посмотрим в консоли то мы
видим что нулевой элемент Ну по первому
индексу это у нас как раз таки то
состояние начальное которое мы передали
Нажми на кнопку а второй элемент - это
функция и действительно то есть вот то
что попадает в нулевой элемент только
как бы это значение присвоения только
уже в формате стейта а второй Эмен это
функция позволяющая изменять
это
по факту мы можем вот так вот
написать
равно нулевой
индекс и
дальше а ви тут коллизия есть небольшая
давайте это контент я закомментировать
й контент и дальше мы добавляем Set это
не обязательно но это вот та практика
которая используется вообще во всех
приложениях с любым гадом Поэтому просто
запомните потому что это как раз-таки
метод позволяющий
изменить Конкретно этот й Но каждый раз
если мы прописывали вот всё для й таким
образом Было бы очень неудобно поэтому
мы можем воспользоваться синтаксисом
JavaScript и сделать деструктуризация
самого вот этого вот массива State array
Мы всегда знаем что первый
элемент это само значение которое мы
сможем использовать а второй элемент -
это функция позволяющая изменять это
значение Set Content всё И теперь вот от
трёх строчек Мы пришли к одной строчке и
именно вот такую запись вы постоянно
будете видеть А вот это вот состояние
это начальное состояние А вот это вот Ну
в данном случае контент который мы
назвали
Ну теперь что мы можем здесь вывести
контент посмотреть что оно
показывает Нажмите на кнопку чётенько
работает и теперь в теории смотрите Так
у нас есть эта функция Если при клике на
кнопку мы вызовем этот Set контент и
сюда передадим Type да то есть мы не
напрямую пишем опять же Обратите
внимание это очень важно не напрямую
пишем Котен рано это Не сработает потому
что для правильного изменения стейта нам
нужно пользоваться вот этой вот функцией
Только таким образом react поймёт что
ага что-то изменилось и поэтому мне
нужно это отрендерить
обновляем страницу вот смотрите сейчас у
нас есть component render один раз три
раза кнопки потому что у нас три кнопки
и дальше я нажимаю например на
концентрацию смотрим Что произошло
произошло следующее мы кликнули на
кнопку дальше снова вызвался рендер Up
компонента потому что мы изменили
состояние в этом компоненте и за счёт
этого он перерисовал нам контент потому
что мы Его изменили Ну а кнопки они
снова рендерится потому что рендерится
весь а компонент Ну Поэтому нужно и
кнопочки отрендерить и теперь видите мы
получили первую динамику с первым
состоянием нажимая на эти кнопке
по-моему очень круто то есть с этим
дальше уже можно идти и работать на этом
этапе я предлагаю избавиться сейчас от
этих всех консоль логов потому что они
нас заспамить ти вот всякие клики там
батоны то есть ну будем без них короче
работать Всё видите сейчас трушно
никаких консолей нет И теперь так как в
дате У меня есть объект
differences Это наше отличие в
университете от других университетов Ну
нативная реклама вы понимаете это очень
важно что там ещё ссылка в описании
ладно суть не в этом да то есть есть
объект differences и видите у него
совпадают ключи с типом Да который мы
прописали для кнопочек То есть я сейчас
хочу выводить уже не сам тип Я хочу
выводить
э контент который есть в этом
объекте вначале я его
подключу так знаете проще сделать
копировать и здесь вместо контента мы
выводим differences и сюда
передаём
контент обновляю страницу видите по
умолчанию ничего нет Кстати что
интересно но если я нажимаю на кнопочку
вот у нас эти табы видите успешно
отрабатывают и показывают разный контент
то есть ну довольно-таки просто
получилось Перед тем как мы двинемся
дальше я бы хотел ещё кое-что
прокомментировать значит смотрите это
тоже очень важный момент есть рано Я
избавлюсь от консоль логов Но это важно
тоже
пояснить а render в общем здесь
Да так это нам не
нужно что я хочу вот мы вызвали Клик по
кнопке Да изменили контент Давайте здесь
мы посмотрим на то что такое
контент мы вот изменили его и сразу же
выводим в консоль то есть вот происходит
у нас анр я нажимаю здесь допустим на
доступность и Давайте изучать то есть мы
здесь дальше вывели Нажми на кнопку и
после этого произошёл анр Окей давайте
нажмём на
подход видите теперь получается Easy Up
render А если снова на доступность
короче здесь я думаю вы видите следующую
картину что при
нажатии на самом деле Несмотря на то что
изменили этот контент здесь в консоль
логе показывается предыдущее
значение Почему так Потому что когда мы
изменяем й он будет изменён вот в самом
вот этом состоянии только При следующем
рендере А поэтому сейчас вот ну бывают
такие ошибки Да у начинающих которые
работают с react что вот они сделали
типа са контент и хотят работать с новым
значением так вот нет пока не произойдёт
заново рендер инициализация там вот этой
вот строчки и прочее а тогда состояние
не изменится поэтому тоже имейте это в
виду Всё я рад что я это пояснил потому
что это важная история
была и А сейчас хочу немножечко
попрактиковаться смотрите было бы вообще
круто да если бы у нас время вот оно Ну
само менялось В общем мы уже знаем как
динамику выводить правильно поэтому вы
можете попробовать это сделать Я
буквально секунду ещё подожду и покажу в
общем-то вместе с вами как это можно
реализовать
Надеюсь вы
успели значит самостоятельная Практика -
это то что позволяет вам становиться
программистом на самом деле И вот
смотрите да то есть как мы можем вот
обладая знаниями про й сделать так чтобы
это
работало в первую очередь мы должны
импортировать use ой Видите сколько я
спойлеров вам сейчас кидаю сколько на
самом деле этих хуков есть в реакте но
пока мы работаем с м дальше Да вот мы
забираем некоторые значения
по умолчанию здесь будет да значение эту
штуку мы
удаляем вообще можно выпилить её и
дальше
интервал здесь мы будем каждую секунду
её
выводить так и здесь мы делаем просто
се на текущую дату и
время и теперь так как это у нас йт
видите мы больше ничего особо здесь не
делаем у нас пошли часики то есть Так
это и работает да если мы посмотрим
кстати
то видите Спан постоянно у нас
рендерится но только Спан то есть имидж
там сам хедер не трогаются потому что ре
умный за счёт этого идт большая
оптимизация скорости его работы что он
видит что состояние которое изменилось
оно аффектив то есть влияет только на
этот Спан поэтому он вместо того чтобы
перерисовывать там весь этот блок он
перерисовываю только нужные нам Спан и
но это не занимает так много ресурсов
вот а супер Давайте пойдём дальше
поработаем с кнопочками Потому что
сейчас всё ещё это выглядит Ну
немножечко не до конца рабочей историей
так как ну вот например по умолчанию у
нас не показывается никакого контента
да
Почему не показывается потому что в App
по умолчанию здесь написано Нажми на
кнопку но мы забираем ключ у объекта нет
такого ключа у объекта поэтому он нам
ничего и не
выводит и поэтому Как мы можем решить
Данное состояние в действительности мы
можем не указывать здесь строчку мы
можем начальным состоянием этот
контент Давайте кстати тоже чтобы
правильно было чтобы вы привыкали это у
нас будет всё-таки Котен Type Да а не
сам
контент тоже здесь напишем Set Content
Type Set Content Type потому что мы
всё-таки с типом здесь работаем И это
будет правильно с точки зрения понимания
кода
А мы можем проверить если у нас в
контент тайпе Ну вот по умолчанию Да
null стоит нет ничего то тогда нам нужно
вывести там вот эту строчку по умолчанию
И для этого есть как бы вот условные
операторы которые мы можем использовать
Давайте покажу как это работает то есть
в первую очередь мы можем написать
тернарное
выражение Например если Content
ty в нём что-то есть то тогда мы будем
показывать вот этот параграф а иначе Ну
давайте для разнообразия здесь покажем
Спан где будет
написано Нажми
на
кнопку такт у нас Находи и примерно
одинаково будет выглядеть то есть вот в
принципе как в обычном JavaScript мы
можем выводить условные операторы там
через тернарные Так давайте посмотрим
видите у нас появляется здесь Нажми на
кнопку Вот Но при этом если мы нажимаем
на подходы то всё успешно
отрабатывает всё-таки нужно параграф P
делать чтобы по стилистике совпадала Но
почему я менял г потому что хотел
показать что Вы можете абсолютно разный
контент сюда влять и в целом это не
принципиально это как бы вот первый
вариант я вам покажу несколько вариаций
просто чтобы вы примерно к ним привыкали
и запоминали
А например сейчас
вместо М давайте вот так вот вообще
напишем с нуля то есть по-другому да
терник можно использовать скажем если не
Котен
Type тогда мы будем показывать скажем
вот этот вот параграф типа Нажми на
кнопку а иначе Нам ничего вообще не
нужно выводить например мы можем здесь
указать Ну когда мы передам ну в GSX то
это означает что он просто ничего не
будет выводить но при этом если Котен
Type есть то мы будем выводить уже вот
этот
параграф а иначе ну ой случайно сафри
включил смотрите обновляю страницу Да у
нас сейчас дублируется потому что вот
эту штуку я
заком
Нажми на кнопку нажимаем в бы
отрабатывает то есть ну по сути Это
тотже самый подход Вот но в целом хотел
пример с лом показать значит но есть ещё
более краткая запись на самом деле
которую чаще вы встретите в
react значит если не Котен typ то тогда
мы используем имы показываем какой-то
контент
а если
ty то тогда мы показываем
уже параграф с необходимым контентом
обновляю страницу видите всё тоже
самое это на самом деле один из способов
работы там в JavaScript То есть если
выражение слева оно принимает значение
True то тогда мы будем тоже это
отображать Но если это будет то тогда мы
будем здесь выводить то есть оно не
выполнится это как бы особенность
синтаксиса именно JS это вот ещ один
способ который вы наиболее часто Я думаю
увидите при работе с
react но также есть ещё один
способ Давайте мы его назовём как T
Content Что такое T кон это то что мы
сами создадим где-нибудь
здесь полни
будет и дальше мы можем
спросить
если Content Type Ну в нём вообще
что-либо есть тогда в Tab Content мы
добавляем
GSX А если там ничего
нет
то в Tab Content мы
добавляем Ну контент какой-нибудь там
для отсутствующего
материала то есть мы спокойно на самом
деле можем GSX здесь использовать там
складывать его в какие-то переменные и
так далее да если мы посмотрим то есть
сюда мы уже отдельно выводим какой-то
шаблон то всё равно функционал остаётся
тот же самым Вот Но эти все способы
часто используются в react вы обратите
на них внимание Поиграйте с этим я же
для нашего приложения сейчас пойду вот с
этим так как это наиболее кратко и
понятная
запись это нам всё не нужно
закомментировать для того чтобы Вы могли
в дальнейшем это
использовать Так что нам ещё нужно
сделать для этого приложения в базе
смотрите у нас пока все кнопки активные
хочется как бы вот понимать на какой
кнопке мы находимся Помните я короче
давал эту задачу Поэтому в первую
очередь мы для Баттона сделаем ещё один
параметр Я назову его из Active
это у нас будет либо True либо
false и
дальше мы в зависимости от этого должны
добавить что-то Ну как бы либо добавить
класс Active либо
нет На самом деле делается довольно
просто существует естественно несколько
способов всё что вам нужно понимать Это
просто обычный If То есть если это True
мы добавляем один набор классов если это
fse мы добавляем другой набор классов
классы - это просто строчки то есть
здесь можем написать если из Active мы
добавляем такие классы Button и Active а
иначе
просто
Button вот в принципе так можно было
решить эту задачу ну и теперь
естественно о только нужно передать этот
параметр из Active равно как нам это
Определить если Content Type равняется
Way
копирую
добавляю для каждого элемента и меняю
только вот эти
вот значения всё то есть ну по какой
кнопочки кликнули Да мы перенесли это
получается в State Content Type Ну и
дальше сравниваем что если вот на
текущем этапе рендера он равняется этой
строчке тогда мы показываем активный
класс видите по умолчанию обновлю
страницу видите по умолчанию как бы
нет ну не выбрана никакая кнопочка
Однако если я кликаю на доступность ВС
доступность активная концентрация подход
кайфово мне вот вообще очень нравится на
самом деле
сейчас покажу ещё один способ создания
вот этих вот классов То есть можно
создать какую-нибудь переменную L cles
мы знаем что для каждой кнопки в любом
случае будет клас Button и дальше Мы
можем с помощью обычного Иа спросить
если из AC то тогда в мы добавляем
строчку AC Обратите внимание на этот
пробел Ну потому что если я его не
напишу С контини просто со строчкой
Button и такого класса у нас нет то есть
можно и так вот сделать это я вырежу и
сюда Я добавляю
classes функционал
будет не такой же как и до
этого
Почему Потому что здесь я написал равно
А нужно написать было плюс равно чтобы
произошла конкатенация обно
доно концентрация Выбирайте любой способ
который вам
подходит я оставлю здесь следующий Как
по мне в данном случае более интуитивно
понятный Ну меньше требует опять же там
строчек кода и
прочего Так что я вам хочу следующем
рассказать на самом деле вот у нас сайт
довольно-таки неплохой получается уже но
присутствует вот э вот конструкци
которая
см
с вот смотрите у нас есть четыре
элемента которые мы вручную как бы
каждый индекс прописываем и представьте
вот если я допустим добавлю какой-нибудь
там ещё Да а подход к обучению вот в
этой дате То есть у нас будет там новый
title и новый description Ну давайте
собственно это и
сделаем какой-нибудь там про Наставников
расскажем наши наставники
клёвые Кстати у нас ребята midle плюс
уровня по факту вообще всё обучение в
реу это именно такое менторство от более
опытных специалистов это абсолютная
Правда Мы очень ну как бы это вообще 70%
программы
непосредственно опять нативная
интеграция друзья мои Короче мы добавили
новый элемент в массив Ну и естественно
мы ожидаем что он добавится сюда но нет
да потому что вручную надо прописывать
то есть что мы делаем
копируем элемент добавляем сюда ещё один
индекс Ну и вот оно уже получается В
итоге конечно Это неправильно делать
потому что ну вручную слишком долго не
гибко не
масштабируемость итерацию вот этого вот
массива чтобы в автоматическом режиме
выводить все эти элементы я это Т заменю
и смотрите временно покажу
вот
если мы выводим
массив такой вот например
то видите мы получаем просто строчку 1 2
3 4 Да Посмотрите элементы вот вот у нас
как бы весь этот массив он не массив а
просто в строчки превратился То есть
если дальше масштабировать эту историю
то в вопервых здесь мы работаем с
массивом то есть вме этих число написать
Сразу
же в JavaScript присутствует метод Map
позволяющий преобразовать его в другой
массив вызываю
его и здесь на каждой итерации я получу
какой-то Way и
преобразуют Way To
teach куда я уже передам вот этот Way
потому что на каждой итерации он будет
соответствовать новому
индексу Если я сохраню такую
запись и обновлю
страницу то как видите всё уже у нас всё
отлично работает а все элементы
выводятся и мы знаем что внутри вот у
нас прописана такая строчка кода опять
же здесь хотелось бы немного уточнить Да
что мы используем обычную стрелочку
функцию естественно Мы можем поставить
фигурные скобочки и написать Return да
то есть это одно и то же Мы обязаны
что-то вернуть в методе Map ну точнее во
внутренней функции Видите вот то же
самое получается
но так как синтаксис позволяет Если
возвращаемое значение пишется в одну
строчку то мы можем сразу же так вот
написать Окей
и сейчас у нас есть ошибка Вот она
Давайте в консоли на неё посмотрим
ошибка говорит
следующее каждый Чад в списке должен
содержать себе уникальное значение
я не буду сейчас даваться в сильные
подробности почему это так работает
вероятно я об этом курсе расскажу или Мы
точно рассказываем про это в деталях на
Большом курсе по react но смысл в том
что если происходит итерация
то нам нужно добавить такой невидимый
как бы
параметр который всегда должен содержать
себе уникальное
значение и в нашем случае уникальным
значением будет title например на самом
деле
description но вот сейчас я укажу так
видите функционал не изменился и при
этом ошибка тоже ушла Хотя если мы
посмотрим на этот элемент то мы видим
что никакого параметра ки нет потому что
этот параметр он нужен для внутренней
работы реакта благодаря ему он правильно
Может трекать где находятся элементы и в
случае если мы например изменяем массив
А это очень частая задача то react не
столкнётся с никакими сложностями и у
него это легко
получится Теперь смотрите Мы это
можем удалить и ну Остальные комментарии
сами Удалите на текущем этапе получается
мы разобрали вот эти вот базовые основы
поработали со списками с активными
состояниями с условными
м операторами и написали уже какое-то
первое более-менее осмысленное
приложение Окей с базовой частью курса
мы завершили но при этом курс ещ не
заканчивается Я думаю вы видите по
таймингу мы переходим к более
продвинутой его составляющей и Первое
что я хочу здесь сделать это безусловно
удалить комментарии чтобы наш код был
чистый красивый не было ничего лишнего
Ну и мы могли уже
разрабатывать приложение
дальше всё вроде почистил остальное
берём в процессе в первой очередь я хочу
с вами поговорить вот о чём мы написали
сейчас уже ну более-менее полноценный
сайт однако я считаю что Тема с
декомпозиции на компоненты она ещё не
разобрана потому что вот если мы зайдём
в наш главный компонент App и посмотрим
на его структуру то явно виден хедер
явно видна секция Main Но дальше
присутствуют вот эти вот секшен Как
видите Они похожи друг на друга и они
занимает довольно-таки много
пространства то есть в целом каждый из
секв он содержит себе какую
и Почему бы нам по правильному вообще не
декомпозировать также это на компоненты
и не вынести их Давайте посмотрим как
это будет выглядеть и как наш код будет
смотреться уже после такого
рефакторинга значит я создам новый файл
который будет объединять себе Вот этот
наш подход к обучению назову я его
teaching что
покам так
как мы делаем код более
понятным так
teaching
section то чем мы с вами сейчас будем
заниматься называется рефакторинг то
есть по сути У нас есть какая-то основа
кодовая и мы берём и уже разрабатываем
так чтобы его улучшить значит здесь я
делаю Return и просто беру и выношу
всё что относится к этой секции значит
смотрите когда я сохраню естественно это
не будет работать по той причини что
здесь отсутствует в файле компонент Way
To teach и также здесь отсутствует
Константа Ways соответственно Нам
необходимо их импортировать М давайте
скопирую
дату differen нам здесь не нужны и
единственное что так как этот компонент
находится в папочке components то нам
необходимо подняться на верхний уровень
для того чтобы перейти уже в дату да то
есть это первая часть рефакторинга здесь
соответственно нам больше не нужны и мы
можем вырезать этот
компонент вставить сюда только опять же
здесь мы немного правим путь потому что
он лежит уже рядышком с этим компонентом
Так теперь значит сюда мы
вставляем
te по какой-то причине он у нас не имр
поэтому импортируем его вручную А
From components и teaching section так и
Давайте
посмотрим всё ли у нас хорошо Как видите
Да ничего не сломалось То есть это была
первая часть рефакторинга неплохо А
кстати Вы можете поставить сейчас видео
на паузу и попробовать сделать то же
самое с этим секшен тут будет чуть
сложнее но Попробуйте Я думаю это
хорошая практика дал буквально секунду
погнали покажу как это делается значит
создаём следующий файл Пусть он будет у
меня называться
differences section jsx мы экспортируем
здесь по дефолту
функцию differences
section так и здесь мы возвращаем
некоторый GSX который
вырезаем абсолютно смело
отсюда
вставляем сюда и здесь мы добавляем
компонент почему-то не импортируется
автоматически
О сейчас если мы посмотрим то по идее
код не должен
работать так как у нас есть
ошибки
изго компонент здесь отсутствуют нужные
нам импорты Ну и как следствие ещ
какой-то функционал с кликом и так далее
первое что мы можем сделать мы можем
естественно
импортировать бан
из
buton
Button отсюда мы можем его убрать дальше
смотрите у нас есть уже какой-то йт
который в А компоненте сейчас не
используется Да потому что он
соответствует локальному
в differences section поэтому я беру
также это всё вырезаю
отсюда Вставляю сюда и нам остаётся по
сути только импортировать отдельно здесь
ещё US State То есть я тоже отсюда это
вырезаю сюда Вставляю
и также если мы посмотрим здесь мы
используем обк differences то есть Нам
тоже здесь потребуется поэтому его Я
тоже вырезаю и Вставляю в наш компонент
только правлю
путь Супер Теперь если мы посмотрим на
наш а компонент то как видите здесь у
нас присутствует чёткая и понятная
структура того что происходит на сайте и
очень легко теперь ориентироваться Что
относится Там к обучению Что относится к
отличиям от конкурентов и так далее И
этим сайтом намного проще и удобнее
управлять Однако Я бы хотел ну уже как
следующая тема сакцентировать внимание
Вот на чём значит на страниц всё
нормально проверяем видите кликается Всё
круто Давайте
проинспектируйте
значит вот сюда перейду есть Бади есть
вот этот вот ди с ID Root и дальше если
мы посмотрим то дальше присутствует ещё
один ди И на самом деле он абсолютно
бесполезный и бессмысленный потому что у
него нет никаких
стилей он ничего не делает нет никаких
классов вообще идеи никакой за ним нет
но при этом он присутствует Почему а
потому что в А компоненте мы всё
обернули в div и Казалось бы ну раз он
не нужен то почему бы его просто не
удалить вот таким вот образом сохранить
и тут начинаются ошибки если мы на них
посмотрим то тут очень много какого-то
Лога
непонятного да И честно
[музыка]
говоря
Нет вс-таки есть адекватная
ошибка Нам ре пытается подсказать что у
нас отсутствует какой-то корневой
элемент Возможно мы имели в виду GSX
Frag пока мы не знаем что это такое но
давайте я объясню почему возникает такая
ошибка почему при использовании GSX нам
всегда нужно иметь какой-нибудь корневой
элемент Ну вот например самый простой
вариант -
этос храним работает
успешно на самом деле мы вот буквально
через пару минут разберёмся более
подробно с jsx Ну просто Представьте что
у нас есть какая-нибудь функция там
скажем Get Number без разницы и она там
возвращает
нам здесь я
создам переменную а она возвращает нам А
например да то есть это обычный
JavaScript мы можем группировать в
JavaScript какие-то элементы ну орава
единстве что меня при при сохранении их
удаляет Вот но Круге скобочки в
JavaScript - это просто некоторая группа
да то есть мы можем их объединять Но что
мы не можем делать Мы не
можем возвращать здесь два значения Это
будет
ошибка Да потому что возвращаемое
значение должно быть всегда одно Ну то
есть Мо Попробовать там какой-нибудь
написать
ROM хочу как-нибудь чтобы притер мне не
удалял эту всю историю там например
Ma
ма Да в общем нельзя так делать И если
мы посмотрим как бы как работает эта
функция то она по идее должна выдавать
нам ошибку изза своего
синтаксиса
Get Number он выдаёт нам ВС равно двойку
но очевидно что поведение здесь
непредсказуемо
и в действительности То
есть если мы вс-таки хотим получить оба
из этих значения да то нам как минимум
нужно взять их например в массив то есть
в таком случае в такой интерпретации да
давайте тоже
протестируем видите мы всё-таки уже
получаем более предсказуемый какой-то
ответ
идется в
том если Мы удалим вот этот корневой
элемент Да и попробуем возвращать
несколько а одинаковых как бы детей в
GSX то получается вот это как раз ошибка
из-за того что А по факту это не теги А
это просто результат работы определённых
функций но всё же в реакте есть
механизмы позволяющие избавиться от
этого лишнего тега Ну как минимум потому
что это а всё равно некая нагрузка на
приложение там больше элементов больше
всего трекать надо Ну и как следствие
оно медленнее работает и вот как это
решается мы можем
импортировать что-то из react и это
что-то
называется
фрагмент Судя по тому что мне сейчас не
подсказывает в коде крутится такая
штучка нужно будет его перезагрузить но
я вам сейчас всё равно покажу смотрите
фрагмент - это встроенный компонент в
реакте который с точки зрения работ
быт
но если мы посмотрим сейчас на результат
того что происходит в
браузере То мы видим что теперь пропал
этот див то есть с точки зрения кода с
точки зрения разработки элемент есть но
в дом дерево он не идёт Да потому что мы
сразу же получаем здесь уже header Main
и дальше идут секции то есть вы можете
частенько встретить в приложениях именно
такую конструкцию
но все е импортировать потому что в
реакте есть удобный синтаксис
позволяющий работать именно с этими
фрагментами мы можем удалить вообще этот
импорт и просто описать его как пустой
тег пустой тег открывающийся и
закрывающиеся я думаю что это интуитивно
даже понятно ну и соответственно
результат будет тот же
самый как мы видели до этого вот поэтому
имейте в виду эту запись мы будем те
периодически
использовать тепер Дава да сечас я вам
хочу показать что же по-настоящему из
себя представляет вот этот вот GSX для
этого Давайте создадим новый файл
который я назову например
inro section GSX как обычно это у нас
будет
экспорт функции
inro
section и Давайте здесь будет что-нибудь
очень простое есть верхний уровень будет
section будет заголовок H1 Ну и будет
заголовок H3 А в качестве текста зайду
в и возьму основной
заголовок Ну только для
наполнения Отлично Теперь мы Давайте
добавим этот интерсек после сразу же
мейна
in section ВС видите я Перезагрузил код
теперь о меня потягивается автоматически
Да если мы
посмотрим то вот у нас в принципе есть
какой-то контент здесь Давайте немного
поработаем со стилистикой чтобы приятнее
было то есть в index.css я
добавлю класс
Cent и здесь я добавлю
ласс
centered тоже самое для H3 и кстати я
немножечко забегу вперёд но давайте мы
добавим ещё Inline стиль сюда Style он
добавляется следующим образом то есть
смотрите как бы я описываю атрибут Style
дальше Я указываю что здесь будет
некоторая динамика да то есть я не
прописываю таким вот образом как это
обычно делается в HTML в реакте так
нельзя делать и дальше мы в в качестве
объекта да то есть первые скобочки они
отвечают Именно за то чтобы указать что
будет динамическое значение а второй
объект указывает на то что дальше в нём
мы уже перечисляем стиля да то есть в
теории я могу взять этот объект и
описать вообще где угодно но мы чуть
позже поработаем с этим и здесь я напишу
Color со значением в объекте пусть будет
666 Вот то есть Как по мне теперь секция
выглядит лучше и что я хочу показать
теперь этим примером то что мы на самом
деле не обязаны использовать GSX мы
можем писать на обычных функциях и
сейчас давайте опишем тот же самый
компонент я его закомментировать
смотрите в первую очередь мне
потребуется
импортировать сам реак из реакта потому
что на самом деле Вот любой тег который
мы видим в GSX это производная от react
и его метода Create
Element метод Create Element он
принимает в себя на самом деле три
параметра Первый параметр - это название
тега который мы хотим внедрить например
H1 второй параметр отвечает за кстати е
я ошибся вс-таки же Корневой
правильно второй параметр отвечает за то
какие опции мы передам в этот тег Ну
конкретно SE У нас сейчас пустой поэтому
сюда мы можем передать Ну а третий
параметр
указывает на то какие дети будут у
данного тега Ну например Здесь я могу
написать Hello неправильно сейчас всё
равно
уберём вот видите он у нас появляется Да
если мы на него посмотрим внимательнее
то вот у нас есть сек и внутри
действительно хранится эта строчка О'кей
значит Теперь попробуем продублировать
всё-таки нашу структуру и так как
следующим у нас идёт H1 то сюда мы и
передаём react Create
Element H1
А теперь уже не нул будет да теперь уже
Бут здесь определённые параметры и
дальше указываем Котен в моём случае
result University
Теперь если мы
посмотрим вот у нас появляется здесь
заголовок но он не содержит себе ла
Center за счёт чего опять же он
находится в левой части поэтому вот во
втором параметре в объекте мы можем
указать как раз таки параметр name ключ
и сюда указать
cer Теперь если мы посмотрим как Видите
вот у нас появляется уже г с
а центральным
позиционированием Ну и остаётся
получается Только добавить
H3
О'кей Но здесь возникает вопрос А как в
качестве третьего параметра Да
передать на один уровень с заголовком H1
ещё H3 в действительности делается всё
это очень просто если там несколько
объектов то мы их оборачиваем в массив И
собственно
говоря здесь я просто лиру функционал
сюда передаю H3 и сюда
передаю Давайте са с
копируем сюда передаю
контент примерно так это
выглядит
отлично но также здесь ещ были стили до
этого Да поэтому мы можем сюда передать
стили а вот в этот объект то есть sty ну
и здесь также описываем в качестве
значения решётка по-моему там было
666 всё Как видите выглядит Это точно
так же как выглядело до этого но теперь
вы можете сравнить Как в
действительности выглядит этот синтаксис
и что происходит с ретом после того как
проходит процесс да который в данном
случае поддерживается именно витом Ну и
то как нам удобно разрабатывать то есть
этот код полностью идентичный и это на
самом деле очень многое объясняет с
точки зрения того там почему Например
стили именно так работают да да потому
что просто мы их передаём как объекты
Вот
и вы крайне редко я думаю встретите в
продакшене именно такую запись её
немного можно оптимизировать там да
например
лучше это не делать не в
отдельно допустим Con E равно Create
Element Да мы просто сохраняем референс
Этой функции Ну и теперь там можем
просто писать здесь везде е такое в
принципе Вы можете встретить тоже и би
процесс именно так оптимизирует вот но
суть это не меняет то есть всё что
происходит в реакте оно приходит вот к
этому на самом деле это просто некоторый
такой слепок вообще
из объектов которые описывает то что
потом происходит в браузере
Надеюсь что это было интересно
разобраться можете с этим поиграться
полезно будет очень Давайте перейдём
дальше к разработке нашего приложения
потому что нам нужно разобрать очень
много ещё различных функций которые есть
в react с точки зрения его базы давайте
мы сделаем следующим образом
значит я хочу показать вам
дополнительный функционал и хочу как бы
переключаться между грубо говоря
страницами на самом деле это будет
неполноценный роутинг как работает
роутинг там в деталях и так
далее мы рассказываем на в большом курсе
уже там подробно про вся эта секция
сейчас мы не Ну в этом курсе Мы не
сможем эту затронуть тематику она
довольно-таки объёмная Но с другой
стороны я вам покажу
как вы можете эмулировать роутинг и
показывать различные страницы на примере
этого приложения но перед этим пока я
говорил Я заметил что в консоли У нас
есть
ошибка которую мы уже видели с вами
недавно каждый ребнок в списке должен
иметь уникальный
ключик Ну точнее свойство ки Откуда
берётся эта ошибка и очень клёво что она
всплыла я её заметил потому что когда мы
в
Inter во второй
Element точнее Вот он передам массив то
помните как работают массивы кажды эже
для того чтобы рек правильно трека
параметр ки поэтому здесь для того чтобы
не было ошибки Так как это одинаковые по
уровню свойства мы передаём уникальный
ключ значение его может быть каким
угодно В данном случае Главное чтобы они
отличались Да теперь если мы обновим
страницу то всё хорошо о'кей
а Итак давайте разработаем наши кнопочки
позволяющие переключать страницу я
создам для этого отдельный файл назову
его какой-нибудь
TS пусть
будет то есть в прямом смысле я хочу
создать ещё одну
секцию которая будет содержать себе уже
кнопочки позво пере горя такая
вот включу наш уже компонент
Button Нам необходимо его
импортировать
Button
Button и пусть первая кнопка будет с
текстом главная например и пусть у меня
будет другая страничка которая будет
называться обратная
связь Значит теперь мы используем этот
компонент в App Давайте после in
section tabs
section Давайте посмотрим как он
выглядит вот у нас есть эти кнопочки Ну
и теперь при клике Нам необходимо
показывать те или иные блоки да то есть
Давайте создадим ещё один блок это будет
Ещё один компонент я его назову
fid
Back SE jsx
здесь Мы возвращаем также section
H3 з мы напишем обратная
связь Ну пока в принципе нам этого будет
достаточно да то есть и теперь А при
клике на какую-то из кнопок в tabs
section Я хочу показывать либо
Вот эту вот страничку да то есть
состоящую из двух секций
либо edb section Как нам это сделать для
этого в первую очередь нам потребуется
State потому что мы будем что-то
нажимать что-то будет меняться и
соответственно рендерить Так что я
создам в а компоненте и именно в А
компоненте да не в T А здесь так как
именно этот компонент отвечает за
рендеринг
страниц создаю
State и я его назову следующим образом у
меня будет Tab и Set Tab да то есть это
будет активная какая-то у нас таба
которая сейчас есть Ну и с помощью этой
функции Мы будем её менять Пусть
активная пока будет у нас фидбек то есть
мы сразу же будем переключать её вот на
эту страницу значит Как мы можем
показывать различные элементы в react По
условию мы уже знаем то здесь мы можем
спросить если T равняется например
M то тогда мы будем показывать вот эти
вот два компонента как их объединить Мы
только что разобрали мы можем для этого
использовать
фрагмент То есть он не создаёт никаких
доп элементов но при этом он их
объединяет вот и притер мне их
сформировал таким
образом и в другом случае если T
равняется
к
то тогда мы
показываем
SE Теперь если мы
посмотрим Мы видим что мы по умолчанию
Ну видим обратную связь Единственное что
хочется какого-то отступа здесь
добавить Мы это можем
сделать в T SE здесь добавить in
стиль
З И тут тоже одна маленькая такая
особенность видите ВС написано именно в
кейсе то есть в оригинальном CSS мы
пишем там marg Def Bon но такая запись
невозможна в JavaScript поэтому мы
трансформируем его в Ну и сюда пишем
О всё красота дальше у нас пока не
работают кнопки то есть давайте мы тоже
это обработаем
вот наш компонент то есть Нам нужно
сейчас связать функционал который
находится в T и Конкретно этот й Давайте
посмотрим что мы можем здесь сделать мы
будем сюда принимать некоторые параметры
допустим и там какой-нибудь
теперь при клике на
кнопочку
вызывать метод onchange со значением
Main то есть мы будем переходить на
главный таб А здесь при клике мы будем
переходить на
фидбек ну и соответственно нам Остаётся
только пометить кнопочку активный
м Значит мы можем сюда передать параметр
из Active и если Active равняется Main
то тогда всё хорошо и соответственно мы
дублируем этот
функционал на вторую кнопку только здесь
мы уже добавляем
фидбек Отлично Теперь нам остаётся
передать эти параметры то есть Active у
нас Tab Да он относится к стей Ну и on
change это у нас
будет то есть здесь мы принимаем
получается строчку по какой кнопке мы
нажали и мы можем сразу же
изменить состояние текущего таба с
помощью этой функции например в Илай
режиме даже то есть здесь мы принимаем
параметр какой-нибудь Active Ну и Set
Tab или Давайте лучше назовём его
current то есть текущий и Set
current теперь при обновлении
страницы видим что по умолчанию обратная
связь у нас подсвечивается активным это
из-за того что по умолчанию в usate мы
передаём активный этап это фидбек но
если мы его переключаем то как видите у
нас открывается уже необходимые страница
Здесь всё работает и таким нехитрым
образом на самом деле мы смогли вот
реализовать новую страничку
а также я хочу отметить следующую
концепцию которая вот мы только что на
самом деле
разобрали почему Например мы в этом
компоненте Tab section не создавали
State Хотя по факту он здесь меняется Да
мы стойт сделали здесь в теории вам
нужно стремиться к тому чтобы
компонентов которые используют состояние
было как можно меньше вот этот компонент
который содержит в себе состояние
называется
умным компонент же который не содержит в
себе состояние а только работает с
входящими параметрами называется глупый
Ну это дословный перевод с английского
языка Dum и идея в том
что чем более точечно вы управляете
стейтон а не распределяется его на
внутренние компоненты тем лучше работает
ваше приложение вот поэтому нужно
стремиться к тому чтобы не было никаких
внутренних состояний и это хорошая
практика и хорошая оптимизация для
работы
приложения О'кей идём дальше и перед тем
как мы будем углубляться уже в Feedback
section там будет очень интересный
контент про работу с формами Я бы хотел
сделать небольшое отступление и
поговорить про стили
Аа давайте мы возьмём для примера наш
Button в
Button мы Ну сгруппировать весь
компонент в папочку и здесь присутствует
и CSS и GSX А здесь мы прописываем
классы как бы импортируем их в
компоненте всё прекрасно и чудесно но
если мы посмотрим непосредственно на
этот компонент то мы видим что стиль Он
общий для всего приложения и если вы не
первый день во фронтенде вы понимаете
что когда есть глобальные стили и
отсутствует какая-то изоляция то шанс
того что у вас будет коллизия по классам
вы там перетрясово
практикой считается определённая
изоляция классов которая работает там
только в рамках одного компонента А не
выходит в глобальный скоуп
и Давайте Я приведу пример Как можно
прямо из из коробки сделать так чтобы
стили были локали Зро только для одного
компонента но теперь уже Баттон мы
оставим Как пример А таких глобальных
стилей давайте мы возьмём header Потому
что
м Здесь нет как бы дополнительных стилей
единственное что я их описываю в индекс
CSS вот есть стиль для хедера и
предположим Мы хотим их локализовать как
это можно сделать я а создам новую папку
р буду значит сюда всё это группировать
давайте обновим импорты но чтобы вы
понимали импорты обновляются только в
GSX потому что здесь мы используем я
сохраню видите ВС теперь и значит
давайте создадим новый файл header CSS в
этом CS я вырежу отсюда сти и вставлю
сда
пори по что мы их не подключили давайте
мы их
импортируем Head CSS и Как видите всё
хорошо Вот Но проблема мы не решили
Потому
что так ошибок нет всё хорошо Да потому
что стили как были глобальные так и
остались Единственное что мы их
расположили с точки зрения кода в нужном
месте но есть такая фишка если мы
возьмём и
перемену CSS header то
Mod
CSS именно вот зарезервированное
название такое то давайте смотреть что
изменится В первую очередь я
импортируют
отсюда
Объект который обычно называется classes
и Давайте посмотрим что же это такое за
объект
Значит мы написали Коль Log А вот мы
переходим и видим здесь пустой объект
А дело в том что когда мы используем
модуль кстати Обратите внимание что на
самом деле вёрстка не сломалась возможно
я выбрал сейчас не самый удачный пример
с точки зрения того что я начал
показывать хедеры так как здесь нет
классов и может быть стои его показать
На кнопочки давайте наверное пока мы
далеко не ушли покажу на кнопочки сори
немножечко не подумал бу Не внимателен
но в общем эту штуку мы можем
оставить давайте мы вот просто оставим
header
CSS эту этого парня Мы переименую в
header
CSS и разберём на примере
кнопочки потому что здесь есть классы
там Вся фишка в классах В общем buton
модуль CSS Всё мы переименовали сиску И
теперь я
импортируют видите всё кнопки потеряли
свои стили хотя у них всё ещё есть
батоны но всё больше они не определяются
Отлично мы пришли в нужную точку С вами
сейчас когда мы работаем с модулями мы
на самом деле должны импортировать
отсюда объек
назвать естественно эту штуку можно как
угодно Но обычно принято е называть
именно Давайте посмотрим теперь
наконец-таки что она из себя
представляет Мы видим что мы получаем
объект он одинаковый в данном случае
потому что кнопка два раза рендерится их
две и мы видим что ключи
сот у них вот какие-то такие
криптографические странные и
действительно теперь для того чтобы
добавлять
классы смотрите Да вот допустим buton мы
здесь добавляем здес Я могу написать
теперь classes то Button вот эта вот
штука название оно полностью идентично
тому как мы описываем это в CSS то есть
вот это вот название
классов ну и соответственно чтобы
продублировать этот функционал здесь я
воспользуюсь
шаблонизатор криптография Да которую мы
не прописывали Но это Как раз-таки идёт
за счёт вот этих модулей и теперь
коллизия имён она практически невозможна
Ну на самом деле невозможно Да потому
что Всё теперь эти стили будут
применяться только в рамках этого
компонента что довольно-таки
круто и я вам покажу ещё один способ
стилизации элементов в react он уже идёт
с дополнительной библиотекой Вот теперь
уже мы поговорим про header Я думаю
настало время смотрите есть такая
библиотечка которая называется
components Да мы прописываем
npm которая кстати делает тоже самое что
мы сейчас разбирали то есть это задача
по локализации именно стилей
и значит давайте так вот всё закрою не
люблю когда много открыто
путаешься допустим разм это на
примере то мы будем прописывать
стили непосредственно в JavaScript и для
того чтобы это всё сработало Мне нужно
импортировать что-то которое Что
называется sty из библиотеки sty
components Теперь у нас есть этот объект
и мы можем его
использовать вот смотрите дальше важный
момент у объекта ST присутствует большое
количество то есть это JavaScript объект
правильно но у него есть свои ключи
которые совпадают с названиями HTML
тегов и так как мы работаем в рамках
хедера то мы можем использовать здесь
header И после этого присутствует Вот
такая вот Необычная штука для начинающих
возможно
А как синтаксис позволяющий вот напрямую
по сути передавать параметры в функцию э
можете сильно не заморачиваться по этому
поводу просто вот привыкнете что есть
такой синтаксис да то есть я здесь не
вызывал функцию там ничего я просто
именно вот эти вот обратные кавычки могу
таким образом передать и всё что я
пропишу вот здесь сейчас оно будет
применяться Ну что мы здесь будем
смотреть давайте мы просто возьмём все
эти стили и Я вырежу вообще их вырежу
вставлю сюда header CSS Теперь давайте
мы не будем его удалять Но я просто
видите оставлю его пустым да то есть на
текущий момент у нас
сломался Т потому что я установил
библиотеку остановив кстати его Ctrl C
командой Теперь мы опять делаем PM
RDF обновляю страницу всё видите хедер
отлетел То есть тут нет никаких стилей
А дальше что мы делаем то есть на самом
деле вот этот
а объект ST он
возвращает что-то что мы можем поместить
в константу Например я могу назвать её
header
контейнер и по факту это уже готовый
компонент Кстати я могу так
закомментировать даже чтобы вообще
наверняка не было мы получаем готовый
react компонент у которого уже есть вот
эти вот стили И теперь мы просто можем
его использовать в
коде с
локали стилями видите функционал не
изменился но при этом если мы посмотрим
то вр добавляются два Вот таких вот
класса Да который содержит в себе
необходимый набор стилистики то есть вы
тоже можете это увидеть я хотел вам
показать чтобы вы понимали что это за
синтаксис Как это
работает поэтому я думаю что теперь мы
можем идти дальше опять же можете
поиграться с этим Давайте ещё последнее
слово скажу да что например если мы
используем здесь не header а
какой-нибудь там ди например то в общем
и целом картина не изменится для нас
Однако теперь вместо хедера видите мы
уже получаем элемент div да то есть тут
мы выбираем Ну как бы Как будет
называться
итоговый
тег
Супер Теперь давайте перейдём к фидбек
сек ну и наконец-таки поработаем с
формами значит я добавляю Tag form и
здесь добавлю Input Type
Tex Ну и в принципе
всё дальше в ик CSS давайте я добавлю
небольшие стилистику для наших инпутов
Ну чтобы они по приятнее выглядели то
есть называется это Ctrl и сразу же
добавлю этот класс с помощью параметра
Class name к
инту так если мы теперь посмотрим то вот
довольно-таки неплохой обычный инпут
получается давайте мы также его
как-нибудь подпишем например добавлю
здесь Label кстати здорово что мне эт
сразу же подсказал что вместо обычного
атрибута for в jsx это называется html4
Да чтобы сразу же соединять их допустим
я назову это name и должен дать шник
тоже здесь можно написать там ваше
имя видите теперь это всё
работает и давайте для примера также я
добавлю здесь
[музыка]
ещё нам не потребуется
здесь
name ID будет Reason соответственно и у
него
будет Reason Ну типа причина обращения
давайте так и
напишем и здесь Перечисли некоторые
опции options там
допустим сть будет
ошибка
нужна
помощь и предложение Ну какие такие
опции Давайте их озом как-нибудь
Help
и так теперь для сек также ещё добавим
Control класс Ну по идее всё должно быть
красиво сейчас да Как видите мы получили
в принципе неплохую
[музыка]
форму е но я предлагаю опять же
использовать наш универсальный компонент
Button
допустим
отправить Единственное что его нужно
импортировать Button
From Button
Button всё отлично кнопочка У нас тоже
есть и теперь
мы не будем пока отправлять никакую
форму но тем не менее мы разберём Ну
типа я имею в виду там на сервер или в
базу данных мы разберём на этом примере
Как работает react именно с таким
функционалом
а и я вам покажу много полезных кейсов
значит в первую очередь нам
потребуется какой-нибудь й то есть
состояние позволяющее следить за
изменением что происходит там в инпуте и
в селекте но мы можем это очень легко
сделать это мы уже знаем то есть use
State давайте для имени Да я
создам состояние name и Set name и также
будет ещё одно состояние для
причины
Reason и Set
Reason по умолчанию имя у нас
будет пустой строчкой а Reason мы
выбираем какой-то один из трёх там
допустим пусть будет
помощь То есть это начальное состояние
естественно обозначение стейта и его
определение инициализация она ни на что
не влияет Поэтому нам теперь необходимо
соединить это состояние с HTML Ну jsx в
данном случае в первую очередь для того
чтобы передавать сюда состояние значит я
использую параметр value и сюда указываю
Какой конкретно йт Я хочу здесь
использовать в моём случае
это Теперь смотрите что получается я
обновлю
страницу и теперь если я попробую что-то
вписать Вот видите я нажимаю Ну я не
знаю вы не видите и не слышите возможно
но я прямо очень старательно нажимаю
ничего не происходит тоже
проверьте у вас не получится Почему
Потому что когда мы Соединяем
состояние с интом мы что-то вписываем но
состояние
и поэтому не перерисовывать его то есть
мы в прямом смысле отменили Поведение по
умолчанию Да видите он даже ругается что
вы предоставили свойство val но не
предоставили on handler и действительно
нам нужно следить за изменениями каждым
изменением конкретного
контрола самый простой способ - это
сделать вызвать Ну передать ещё параметр
on
допустим
CH этой функции у нас нет я её
создам и в эту функцию мы естественно
принимаем Event самый обычный Ну
практически самый обычный не буду сейчас
усложнять ивент который вы встречаете в
до если мы на него
посмотрим
Event
консоли Я начинаю что-то прописывать
видите у меня не меняется состояние но
при этом мы как минимум видим какую
кнопочку я нажал да то есть теперь я
подтвердил свои слова что я по ней по
клавиатуре нажимаю соответственно для
того чтобы у нас менялось что-то в
отображении Нам необходимо изменить
состояние поэтому здесь я делаю Set name
Да именно с помощью этой функции мы
меняем состояние Ну и сюда уже
Передаю
то что есть в нашем
инпуте И теперь наконец-таки мы можем
что-то вписывать и оно будет меняться
потому что теперь мы меняем состояние и
как следствие состояние теперь
синхронизируется с
отображением даже давайте мы вот как
поступим временно а может быть и нет я
добавлю здесь г пре где буду дебажить
Что у нас там вообще происходит то есть
я буду вводить сюда name и Reason
будем
отслеживать Вот видите Теперь у нас есть
полное соединение да то есть наше
состояние меняется и как следствие
меняется Вот и в данном случае а по
умолчанию у нас Reason Help то есть всё
с интом мы здесь разобрались но не
разобрались с хелм как его сделать А
честно говоря также то есть в Select Мы
также передаём значение val только здесь
уже
указываем
состояние
Reason и в
onchange мы можем создать также
отдельную функцию handle Reason change
например но можем Inline её прописать то
Здесь мы получаем некоторый Event и
говорим Set Reason равно Event Target
value в принципе это Inline как бы стиль
а не всегда имеет смысл выносить всё в
функцию и так далее То есть можно так
прописывать Теперь смотрите видите по
умолчанию уже помощь у нас теперь я
делаю предложение и меняется у нас на
sug прописываю что-то в имени Как видите
это всё плюс-минус начинает работать то
есть вот какая идея на самом деле
заключается за Two Way Банго так
называемым в реакте это когда
связывается им функционал и сам шаблон
но теперь давайте идти дальше Значит мы
немножечко уже успели познакомиться с in
стилями и
Давайте попробуем пока очень простую но
ВС же добавить валидацию в случае если у
нас что-то неправильно заполнено Ну
например если значение у нас пустое мы
тогда не можем это всё пропустить для
этого я могу добавить иль и опять же
первые фигурные скобки указывают именно
на то что дальше будет динамика
в имен втоми фигурными скобками
указываю уже определённый объект
и давайте мы укажем параметр Border да
то есть будем задавать границу в случае
ну будем делать её красненькой Короче
если у нас нет ничего в неме мы можем
как написать name удалим пробелы потому
что в конечном итоге это просто строчка
а дальше спросим длину этого состояния
если в длине что-то есть тогда мы ничего
не будем добавлять просто нул
или там даже und да можно сделать
Давайте Ну оставим а иначе мы будем
добавлять один пиксель
Solid Давайте тепер посмотрим наю
страницу и видите теперь по умолчанию у
нас Красная граница есть потому что как
раз таки выполнило это условие то есть в
имени ничего нет если мы что-то
пропишет но не очень на самом де ког Мы
заходим сразу что мы неправильно что-то
запомнили мы может быть даже не
планировали ничего делать поэтому мы
можем поступить немного иначе Давайте
создадим отдельное
состояние для наличия
ошибки оно будет
называться Error Ну например
Set Error и по умолчанию оно будет
находиться в
значении дальше когда мы начинаем что-то
менять уже в инпуте то здесь
а также мы можем изменить Set has Error
и спросить ели что-то в
name
triam length если это равняется нулю да
тогда ошибка у нас есть но если Вы
внимательно смотрели предыдущую часть
курса то сейчас Можете подумать А почему
этот код работать не будет интересный
очень момент
я специально небольшую паузу
сделаю Но надеюсь что вы короче
поработали самостоятельно объясню ещё
раз
что когда мы меняем состояние с помощью
хуков
то сразу же автоматически ещё стейт не
поменяется до тех пор пока не выполнится
оставшаяся часть функции только после
этого А когда выполнится вот весь этот
код а будет новый цикл рендеринга
непосредственно самого компонента и так
далее То есть вот на этом этапе
оно не совпадает с тем что находится
здесь Поэтому в данном случае можно вот
так вот написать это будет более
правильно давайте мы также выведем
этот eror сюда то есть теперь можем
написать если has Error тогда мы будем
показывать красную границу а иначе
ничего не будем
выводить Вот теперь видите что по
умолчанию ничего нет но если мы начинаем
что-то вписывать и удаляем то всё теперь
Красная граница получается в принципе я
доволен этим функционалом и теперь на
основе него
А давайте мы пробуем заблокировать
кнопку Потому
что нельзя давать ей возможность
отправляться если что-то неправильно У
нас есть для этого мы можем добавить
параметр и он будет работать только в
том случае если у нас есть ошибка Если
есть ошибка тогда disable должно быть
True но смотрите тоже такой есть нюанс с
кнопочками этими То есть у нас уже есть
определённый набор параметров Да которые
мы сюда передаём
А теперь нам нужно добавить получается
disabled и этот ED нам нужно добавлять
Теперь сюда равно disabled Ну в общем то
есть делат довольно-таки большое
количество манипуляций если мы захотим
передавать сюда ещё какой-нибудь ID там
класс нем и прочее намм придётся каждый
раз это вот всё прописывать сюда и так
далее но по факту мы дублируем просто
эту историю потому что название
параметры название атрибута одинаковые и
в данном случае я хочу показать а способ
который вы часто встретите в реакте для
таких ситуаций чтобы вручную не
прописывать вот эти вот все свойства и
так далее в том числе кстати он Клик
Потому что видите он дублирует здесь его
тоже можно
выпилить мы можем прописать вот эти вот
входящие параметры они кастомные у нас в
данном случае то есть мы сами их
добавляем и здесь мы можем
воспользоваться оператором rest То есть
он выглядит как сд Но это вы понимаете
JavaScript сюда мы
собираем Значит все оставшиеся входящие
параметры которые нам поступают мы не
знаем сколько их будет Вот момент вызова
как бы jav будет понимать И теперь у нас
есть
обект который мы можем уже взять уже с
помощью оператора spred и развернуть в
компонент онклик теперь можем
убрать потому что он совпадает Ну и
Теперь смотрите
аэ Ну да Нужно ещё
добавить для
Button disabled стиль там пусть будет
курсор
not всё хорошо если Мы удалим видите он
у
нас получается можем в качестве теста
для сейчас чтобы не много этому времени
уделять по умолчанию поставить что у нас
есть какая-то ошибка опять же как
правильно работать с формами это
отдельная история там довольно-таки
много функционала и можно использовать
там и сторонние библиотеки и прочее
угадайте где мы подробно про это
рассказываем естественно на полном курсе
все ссылки будут в описании а просто
если сейчас всё про это рассказывать Ну
буде бесконечный YouTube ролик
получается нам нужно основу разобрать
поэтому видите по умолчанию сейчас
кнопочка у нас дебт то есть всё работает
и вот это он клики они также сохранились
Вот то есть тоже очень классный как бы
паттерн есть который часто вы использу
увидите при разработке на react
рекомендую Итак с этой частью Мы тоже
разобрались Кстати мы можем ещё вот так
вот сделать у нас же есть ещё параметр
из и можем поставить его из Active будет
валидный в случае если у нас нет
ошибки вот видите теперь красивая
кнопочка получается Ну в общем мне
нравится теперь Значит я хочу отдельно
показать вам другой функционал который
очень важен для рабо в
Ну опять же при взаимодействии со стей
для этого я придумаю искусственный
какой-нибудь пример скажем у меня будет
кнопочка
здесь я даже не буду по-русски её
описывать Я назову её
ER и при
клике я буду вызывать метод tog
eror то есть функция о будет
искусственно переключать наше Вот это
состояние что у нас есть ошибка в форме
значит очевидно если мы работаем с Том
да то есть с переключателем то мы должны
основываться Ну в случае с боле
назначениями на предыдущем состоянии это
самое простое то есть ну если нам нужно
переключить мы
делаем вот у нас есть состояние на котом
мы основа Дава сто возм
ение отрицание от buan будет
противоположное его значение тут я думаю
тоже всё довольно-таки просто Давайте
посмотрим работает ли
это нажимаю tog Error видите работает
нажимаю tog Error вот мы можем
переключать Ну как бы я понимаю пример
такой но он очень важен Сейчас вы
увидите Почему
А всё классно работает
но что
если мы вызовем этот метод
дважды по логике получается да вот у нас
по умолчанию оно находится в True то
есть ошибка есть Когда мы это вызовем
оно должно быть в значении fse но мы
вызываем же его ещё раз мы должны
получить здесь Т то есть по факту ничего
не должно
измениться Давайте посмотрим наю
страницу специально нажимаю
eror и оно меняется нажимаю ещё раз
меняется Почему
так
опять разобрались что
А когда мы вызываем этот has Error сам
State ещё не поменялся Да и поэтому мы
заново вызываем Р С тем же самым
значением и многие начинающие делают
большое количество ошибок при работе с
вот подобным функционалом поэтому я вам
покажу как правильно это сделать это
вообще рекомендация там Best practice
непосредственно от самой команды в
реакте Вот как это выглядит значит э
временно комментирую в эти вот функции
которые меняют наше состояние мы не
всегда можем точнее мы не всегда обязаны
передавать Просто обычное значение мы
можем сюда передать
функцию Давайте вот так заново напишу мы
сюда передаём
функцию которая как параметр принимает
предыдущее значение тко предыдущее
значение
этого и в данном случае вернуть здесь
а новое состояние основывающееся на
предыдущем только уже не беря этот стейт
который фиг знает когда поменяется Да а
Конкретно А как это заложено в
механизмах реакта И если мы сразу же да
поменяем дважды это
состояние обновлю
страницу видите я нажимаю и не меняется
ничего потому что мы дважды изменили Ну
и очевидно что оно также находится в
значении True то есть теперь наша ошибка
ушла
и это то как на самом деле правильно
работать с предыдущим состоянием то есть
учтите этот момент Я как раз-таки хотел
бы вам предложить сейчас с этим
потренироваться немножечко а разобрав
при этом параллельно ещё один
концепт который а тоже относится к
стей запомните этот код Потому что
сейчас мы его сильно
смотрите Вы можете меня спросить а вот
почему мы несколько раз создаём usate
там для каждой строчки свой usate Кстати
да Как видите это всё вполне возможно и
реально Почему бы нам просто например не
сделать состояние объектом например из
группировать всё в один объект Но что я
вам скажу Вполне себе мы можем это
сделать Ну примерно вот таким образом то
есть Давайте перепишем теперь наш
компонент теперь наше состояние оно
будет единственное будет называться
иф и это у нас будет объект содержащий
себе по умолчанию пустая строчка
потом Ну да у нас оно стоит по умолчанию
и по умолчанию да то есть Всё теперь
один usate и вот это вот всё Мы можем
убрать Какие тут есть особенности Да
теперь у нас получается вме вот этих вот
многообразия
различных присутствует один форм Ну вот
смотрите значит здесь мы должны изменить
имя и мы должны изменить здесь да то
есть можем так вот
написать равно evet name
и у нас будет равняться вот всей этой
конструкции и давайте пока что это мы
заком потому что будет
ошибка нужно поменять видите value name
у нас теперь отсутствует Но он теперь
доступен в form name да то есть опять же
я наверное не сказал Хотя это важно было
сказать мы можем любые состояния
начальные передавать в usate это вполне
себе Рабочая история
а то есть мы получаем объект Да просто
дальше его группируя в
нём так form
Reason reon мы сейчас сделаем Ну здесь
мы вводим form
name
reon Давайте проверим Удалось ли мне не
удалось находится у нас в бане не дол Я
бана то здесь тоже У нас должен
быть Так теперь Давайте вспомним по
функционалу то есть вот мы
скаже изме Давайте
попробуем и давайте Вы наверное не
увидели Обратите внимание Вот на этот н
то есть по учению Help всё чётко всё
понятно круто но как только мы начинаем
вписывать н по какой-то причине
пропадает Почему так мы можем
попробовать теперь в пре вывести
следующую конструкцию То есть попробуем
J string привести к строке нашу
форму
это будет такой дебаг у нас видите по
умолчанию у нас как бы полноценная форма
То есть со всеми необходимыми
состояниями Но как Только мы начинаем
вписывать пропадает Рим по какой-то
причине и в этом как раз-таки
заключается такая вот некоторая
проблема использования объектов в йте
Почему зачастую вы увидите именно вот
этот Потому что когда мы вызываем сефо
видите мы вроде меняем и name меняем и
Error но мы не добавляем
Reason да то есть по правильному нам
нужно написать здесь Reason равно
form Reason и тогда это должно
работать видите он остался прежним но
как вы понимаете там чем больше будет
этих полей короче это не очень удобно
будет но тем не менее так можно работать
потому что мы теперь то уже знаем да что
вот есть предыдущее состояние поэтому мы
можем описывать это следующим образом мы
основывается на предыдущем состоянии и
здесь возвращаем круглые скобки они
группируют в фигурных скобках полностью
предыдущий объект
Но дальше для него мы
заменяем два поля Ну сколько нам нужно
полей столько и меняем Теперь мы н
конкретно не описываем и нам неважно
сколько там других полей было в
состоянии всё будет хорошо видите он
остаётся У нас вот теперь соответственно
каждый раз Да когда
мы меняем там то же самый Reason
А здесь у нас будет Set
фом prf группируя возвращаем все
предыдущие состояния и Reason мы меняем
на Event Target
value так есть ли Тут ещё у меня
какие-нибудь места Ну tog Error честно
говоря нам больше вообще не нужен то
есть мы с ним разобрались поэтому всё
покойся с
миром
функция вроде бы всё да то есть обновлю
Да как видите всё успешно работает
теперь нет никаких проблем меняем ны всё
вводится соответственно
А теперь давайте этот прит тоже
закомментировать
того что у меня это учебный ролик могу
себе позволить
немножечко бунтарства определённого В
общем мне нужно отдельный компонент
создать для того чтобы вам
продемонстрирую следующую фичу А я не
буду его выносить там отдельную функцию
и прочее потому что по логике он сюда
Классно вписывается В общем компонент у
меня будет называться State vs RF есь я
буду
возвращать
м Дайте какой-нибудь div
H3
Input value Ну и какой-нибудь ипу то
есть Сейчас я вам всё объясню потому что
ну более-менее состо этом мы
разобрались Однако есть ещё А в реакте
механизмы позволяющие управлять Ну
взаимодействовать например с тем же
самым
инпутов
ну
предположим что
нормально давайте для красоты Я хочу вот
так вот сделать здесь я укажу fse чтобы
оно красно не подсвечивать
и тоже вот для этой кнопки добавим
Style margin
Bom Слушайте а это нет это будет
лишнее потому что мы можем просто
перенести Вот это стоит в срф сюда и HR
сюда Всё я думаю что будет так намного
красивее всё-таки
нужно добавить какой-то отступ на форму
это ни на что не влияет с точки зрения
функционала Но это влияет на некоторую
эстетику эстетика тоже очень
важна всё Ура так да и для инпута Мы
также добавляем ещ и
класс
всё отлично значит давайте быстренько
сделаем рефреш того что мы уже прошли с
йм опять же вы можете попробовать это
самостоятельно сделать обработать этот
инпут и вывести вот сюда значение того
что сейчас прописано в инпуте да то есть
хочу здесь динамически получать это
значение маленькую паузу выдержал могу
писать да то есть мы знаем US State помо
учение пустая строчка там здесь у нас
будет какое-то value Set value
сюда мы
вводим мы привязываем
к много дах
и здесь у нас
Event
evet то есть быстро я написал то что мы
уже в принципе с вами делали и как мы
управляли с
помощью
эмп экранах называется Two Way binding
да то есть ну шаблон связан
непосредственно с функционалом и вот он
в динамическом режиме так вот
отображается выглядит это ну реально
классно но а что допустим если мы хотим
чтобы вот это вот значение которое мы
сюда писали сейчас Оно отображалось
только если я нажму
Enter Ну мы можем придумать какие-нибудь
там различные флаги например
какой-нибудь
Show Set Show Да и дальше спрашивать
если
Show то
тогда мы будем показывать здесь
value и при нажатии на enter то есть
он Ke Down
handle Ke
Down нужно создать эту функцию
принимаем некоторый ивен спросим
если
Event Ke равно
Ender тогда мы делаем Set Show на True
Ну вот какая-то такая логика
получается обновляю
страницу да Видите прописываю нажимаю
Enter всё оно добавляется то есть в
целом задача Ну как бы Вполне себе
решена но есть проблема то есть Enter я
нажал уже
а соответственно стоит продолжает
меняться и Да мы можем добавлять ещё
какие-нибудь стей чтобы это как-то
отобразить
но в общем это будет не совсем корректно
Поэтому вот для таких ситуаций и Ну я
просто как базу опять же сейчас вам это
обрисуйка
Когда нам не нужно вот так вот в
динамике постоянно следить за
всем Мы
импортируем другой к который называется
usf и Теперь смотрите как его
использовать я создам и и просто вызову
метод
US дальше у меня вот есть эта константа
и я могу е с помощью специального
параметра в jsx который называется
добавить
Теперь мы можем удалить вообще
этот можем удалить
Он можем удалить этот у нас есть только
и и
теперь для того чтобы его отобразить Мы
здесь указываем
И у него есть одно свойство о называется
Cent это
сво привязан это и ну в нашем случае это
соответственно и в общем я где-то вместо
РФА нужно было сказать и Но вы поняли я
думаю идею да то есть inp curent в
данном случае это вот этот инпут опять
же в более продвинутых вариациях это
может быть ещё и кастомный компонент
который мы используем но вы знаете да
где уже это всё посмотреть там где
готовят к профессии рек разработчика вот
мы же с вами пока занимаемся основами на
тубе
и как следствие так как это у нас дом
элемент инпута то у него есть значение
для того чтобы получить это
значение если я обновлю
страницу начинаю что-то вписывать там
допустим владилен нажимаю Enter видите
владилен у меня отобразил да И теперь
всё он один раз
зафиксировал такая вот
истон
до смотрите да то есть если мы посмотрим
в консоль L на то что такое ИТ у нас по
умолчанию
и
И до тех пор пока мы не перешли ещё там
в GSX и не связали это с
фом то мы видим что мы получаем объект
Cent
Но данже определ что это потому
прол далее но да то есть покажу тоже
лайфхак если мы вызовем здесь Deer
специальное ключевое слово в JavaScript
позволяющее остановить процесс
исполнения то это к вопросу о том как
дебажить
react то нет он всё равно показывает
здесь
inpol вот видите в карте
находится
ладно не получилось быстро
продемонстрировать эту всю
историю Однако вот на самом деле он
правильно Показывает То есть пока не
произошёл рендеринг пока мы не связали
короче всю эту историю с
шаблоном Cent он будет undef если вы
где-то в шаблоне будете обращаться там
скажем к пусть будет здесь
H1 к и Cent Да я думаю что так можно
показать
это то мы получаем кучу ошибок потому
что канто ещё не определён то есть мы
ещё не дошли вот до этого места и не
связали его то чтобы и соответственно мы
Обращаемся смотрите это вот у нас undef
И undef value это всё ошибка беда Вот
это красны страни смерти поэтому Чтобы
исправить эту ошибку Мы можем поставить
знак вопроса
это просто на будущее небольшой Хак
видите оно исправляет всю ошибку Вот
теперь оно как видите
работает всё это я убрал Это я хотел вам
продемонстрировать Ну и конечно же если
говорить уже более профессионально там и
правильно Да с точки зрения того Чем
отличается usf от й
то когда меняет чтоли в рек компоненте
он вызывает новый цикл рендеринга И за
счёт этого мы как бы обновляем UI use RF
же в своём случае он не вызывает цикл
рендеринга и поэтому мы можем его менять
он на самом деле меняется сейчас но
компонент не рендерится есть как бы
разные Так я опять сломал что
ли а в общем
есть продвинутые м моменты Когда мы
можем сохранять допустим определённое
состояние в рефе И тем самым как бы
делиться этой информацией между
различными компонентами То есть это тоже
довольно-таки более продвинутая история
Вот Но пока мы чуть позже ещё вернёмся к
фам кстати вот сейчас уже скоро будем
подходить А я вам покажу ещё кейсы
которые с ним есть но перед этим перед
этим нам нужно разобраться со следующей
такой очень важной конструкцией которая
называет э в это то что идт в базе это
то что необходимо понимать и поэтому мы
создадим новый
компонент который я назову например
Effect GSX и здесь мы добавим ещё один
значит компонент
реакторс
давайте мы так его назовём
эффект эк и Давайте в нашем ато
G добавим ещё один
T
эфект Effect
section по умолчанию у нас
будет
э
я добавлю новый T
экт эффект и
эффект так вот как выглядит код Ну и
теперь по
умолчанию мы находимся на страничке
эффектов значит для демонстрации вообще
того что является у нас эффектами в рете
Я хочу показать несколько м
примеров начнём с одной интересной
задачи в Effect section я добавлю нам
уже привычную
кнопочку
Button
так тайпинг покинул меня н обещал
вернуться а
Ир
Button Button Button А значит
открыть
информацию будет текст на этой
кнопочки и что я хочу сделать вообще я
хочу чтобы при нажатии на эту кнопку
вызывалось модальное окно параллельно я
вам ещё покажу различные концепции
которые присутствуют в реакте Ну для
того чтобы там более жирный получился
кусок контента Вот Но основной будет
акцент направлен на эффекты именно чит
что нам здесь нужно да то есть Давайте
добавим здесь
клик и здесь у нас будет функция Open
Mod пока мы не можем открыть никак
модельное окно поскольку у нас нет этого
компонента Так что давайте мы его
создадим я добавлю папочку Mod заодно
рассмотрим как Мы это можем сделать Ну и
будет будем эпо деф новую функцию
которую назову
Mod и здесь мы будем возвращать
специальный
HTML г который называется Dialog Чуть
позже я покажу вам Почему именно его так
как у него есть дополнительный
функционал связанный с модальными окнами
в качестве контента мы будем сюда
передавать именно
children
есть-то для это диалога Ну и Давайте
здесь я его
добавлю
Mod будет какой-нибудь здесь очень
простой контент например
H3 H From
Mod
параграф Можем написать нажимаю T и он
мне генерирует какой-то базовый
текст в при посмотрим как это
выглядит А пока это никак не выглядит
потому что по умолчанию моду у нас не
открыт а то есть если мы перейдём и в
Dialog добавим параметр
Open то как видите у нас получается вот
эта вот красота не неимоверная Давайте
добавим какую-то базовую стилистику для
этого
модалка То есть я создам здесь файл
там допустим будет Model
CSS сюда вставлю базовые стили для
диалога Ну
и просто пока
импортируются оно теперь более-менее
красивым Уже получилось а опять же тут
не про стилистику сейчас да то есть у
нас есть параметр Open который позволяет
этим всем манипулировать Почему бы нам
не создать State в Effect Action который
будет отвечать за отображение модального
окна
Т по умолчанию будет не виден у
нас Давайте наом просто
и по правильному писать из
Open Open Ну что-нибудь в этом духе но
мы не будем этим заниматься потому что
выглядит просто красиво так и
теперь м Model А в функции которая
позволяет открыть моку мы будем делать
Set Model
на True и в моке нам также нужно принять
этот параметр который будет называться
Open мы его передаём то есть вот это вот
нативный H атрибут да который
присутствует в опиш тега
Dialog так обновляю
страницу видите сейчас ничего не видно
но если я нажимаю открыть информацию то
появляется наше модальное окно выглядит
честно говоря так себе Почему Потому что
если мы посмотрим на стилистику которая
есть в модальном окне точнее Тут даже
так скажу две причины есть я прописал
очень простые стили типа Ман топ и бам
10М Да из-за этого мы видим что модалка
она отталкивается короче вот кнопочки Но
вообще - это такой компонент который
должен находиться над всеми
и мы можем это сделать именно через CSS
Но вообще правильно Даг складывать
куда-нибудь наверх Там типа вот в по
HTML структуре чтобы ну он правильно
находился и мы можем это сделать с
помощью реакта с помощью специальной
такой фишки которая называется
порталы Давайте покажу как это работает
на самом деле очень простая
фича Мы импортируем что-то из react дома
кстати уже наконец-таки дошли до него и
это что-то называется Create Portal
теперь вместо того чтобы возвращать
здесь вот этот GSX я буду возвращать
здесь Create Portal и первым параметром
я сюда добавляю GSX а вторым параметром
Я указываю дом элемент Куда мне
необходимо за рендерить всю эту историю
там Get Element by ID Давайте назовём
его какой-нибудь Mod У нас сейчас нет
этой молки поэтому точнее этого айдини
Поэтому мы его можем создать где-нибудь
здесь
и теперь если я обновлю страницу и нажму
открыть информацию видите модалка у меня
открывается уже в div с ID Model именно
по этой причине она находится над
остальными элементами и выглядит это уже
более правильно то есть безусловно react
он рисует как бы дерево компонентов но
благодаря порталам мы можем часть
функционала вынести из этого древа Ну
вот например как в случае с мадай
куда-нибудь наверх то есть это очень
полезная
фича О'кей с этим мы разобрались очень
быстро причём Здорово
Однако есть другая проблема потому
что Да у нас открывается модальное окно
Но нет так называемого бэк дропа это вот
это затемнение знаете которое появляется
когда Ну есть всплывающие элементы и у
дало оно на самом деле присутствует То
есть можно даже написать так вот
mdn Dialog mdn - это документация Да а
которую следует читать периодически тут
очень много полезной информации есть
И если мы
здесь посмотрим в доки то давайте
перейдём в дом интерфейс сейчас я
объясню что я
ещё видите у него есть определённые
методы есть метод Close есть метод
Show
а есть Show Model и он показывает диалог
модальное окно поверх любых других
диалоговых окон то есть это то что мы
хотим использовать сейчас то есть если
мы А мы как бы сейчас не вызываем на
самом деле этот метод мы просто
показываем или не показываем Да с
помощью State of react но если мы
вызовем метод
а Show Model то тогда будет кдп ну
проблема-то не очень большая на самом
деле то есть мы можем как написать
если параметр Open равняется то тогда
нам нужно сделать F получается этого
диалога да
давайте я создам здесь
Даг равно
use да то есть опять же Он позволяет
нам взаимодействовать как раз с
Эмен да обратиться То есть если Open то
тогда Di
curent Mod а иначе Di
curent там да
называется Давайте посмотрим исправил ли
эту
ситуацию видите у на есть в данном
случае
шибки Давайте посмотрим а Да он
называется ошибки пока связаны с
неправильным вызовом
метода так да
И обновляю
страницу и всё равно мы видим некоторые
ошибки в данном случае Почему Потому что
мым
про
справедливое на самом деле замечание у
реакта
поскольку Даг Мы создали Но помните я
показываю Да что вот на текущем этапе он
ещё равняется
то есть в данном случае пустой потому
что он ещё не пришёл
к работе с шаблоном и не
привязал и поэтому наша логика в данном
случае Она работает и
ки
нужны эффекты которые позволяют как раз
таки разобраться с этой ситуацией значит
Как это работает Значит мы
импортируем который называется
use и КТ мы должны использовать
исключительно в компонентах ну или в
кастомных хуках мы разберём базу этой
теории в этом видео чуть дальше но вли
пока й или от рефа use Effect он ничего
не возвращает то есть мы просто его
вызываем и он принимает в себя два
параметра Первый параметр - это callback
то есть функция которая
м как бы будет выполняться когда
выполнится сам эффект сейчас я поясню а
второй параметр - это массив массив
зависимостей вот мы кстати видим он
называется deps ну dependency list а
сокращённо то есть от чего должен
зависеть этот эффект концептуально чтобы
вы понимали что такое эффект мы с
помощью этой функции регистрируем
определённые задачи которые реак
компоненту необходимо будет
выполнить и use Effect он начинает
работать не в момент когда вот react
прочитал компонент начал что-то там
выполнять он зарегистрировал эту задачу
Дальше Он всё это тут делает и как
только всё это вот завершило
он уже там зандер всё закончил Тогда он
начинает делать эти эффекты и теперь вот
этот история то есть мы Обращаемся здесь
к диалогу да то есть Нам нужно чтобы
диалог был определён поэтому мы этот код
вносим в
эффект Ну и Давайте
смотреть как это у нас работает нажимаю
открыть
информацию Так секунду
Да в коде Давайте ещё уберём вот этот
Open Всё потому что он нам будет сейчас
мешать нам нужно открывать модал именно
за счёт РФА обновляю страницу смотрите
нажимаю открыть
информацию так ещё
раз и всё равно пока не работают и здесь
Также мне сразу же стоит вам объяснить
одну очень важную вещь именно про
эффекты то есть видите сейчас у нас
здесь пустой список зависимостей
но в зависимостях Мы указываем те
состояния которые являются реактивными
Ну и которые влияют именно на
перерисовка компонентов в нашем случае я
убрал вот этот параметр Open из диалога
Да потому что мы будем работать
самостоятельно открывать мо давку через
опиш браузера но этот эффект он зависит
от
она и поэтому нам этот Open необходимо
добавить в список зависимости то есть
теперь эффект будет смотреть Когда
меняется эта штука и уже выполнять этот
код такая логика здесь Давайте попробуем
Да видим уже мода очку Но я ещё раз
нажимаю открыть информацию Ура У нас
появляется здесь БК дроп да то есть
затемнение и появляется сама модалка
Давайте сразу же чтобы не идти далеко а
мы добавим в
модал кнопку позволяющую
закрывать я
это модальное окно там при
клики Set Mod на по можно прямо в
онлайне
записать информацию закрыть лку видите
Всё у нас прекрасно работает то есть это
первый ну необходимый кейс который важно
понимать при работе с use
эффектом но также присутствует и другие
кейсы которые я прямо сейчас вам
продемонстрирую так
как даже два У нас есть помните ещё с
самого начала ролика вот это
вот место в приложении где у нас
работает интервал постоянно и показывает
текущее
время на самом
деле Здесь нам по правильному То есть то
что мы написали это не совсем корректно
с точки зрения разработки Да и нам по
правильному Здесь тоже нужно
использовать эффект И сейчас я объясню
почему да давайте тоже сюда перейдём в
header jsx какой-то код
есть Смотрите дело в том что мы в
каком-то компоненте берём и создаём
интервал всё работает вроде бы успешно и
нет никаких проблем но а что будет если
Ну вдруг по какой-то причине мы возьмём
там и удалим хр как
компонент опять же вы можете придумать
какой-нибудь другой компонент не но суть
в том что мы его там допустим
переключаем та то есть Он исчезает из
дом дерева но таймер мы не Чистим и
получается что у нас происходит утечка
памяти потому что таймер Постоянно
работает а функционала нет мы потом
заново его открываем появляется новый
таймер и так далее То есть нам по
правильному всегда нужно чистить эти
таймеры и в данном случае нам на помощь
может прий
ки
это добавляем к нам необходимо его
импортировать и дальше мы говорим что
этот код мы оборачиваем
как задачку мы говорим что список
зависимости в данном случае у
нас будет пустой массив потому что этот
эффект мы вызовем в момент инициализации
данного компонента Ну я могу здесь
консоль
написать пер
header экт
обновлю страницу Вот видите он у нас
один раз появляется но больше у нас его
нет потому
что список Ну как бы этот эффект он ни
от чего не зависит и поэтому он один раз
вызывается сколько бы раз хедер у нас не
рендерится эффект больше не
затрагивается это тоже очень важный
момент понимать что эти вещи не
связаны
поэтому можем в use перенести весь этот
код да то есть мы создаём интервал уже в
нём
и я его вынесу в константу интервал и
теперь чтобы нам почистить этот интервал
Давайте даже я попробую сымпровизировать
я это не готовил но мне кажется это
важно объяснить вот у нас видите хедер
есть правильно Давайте
временно Я создам ещ
один помоча будет
True visible и Set
visible и сделаю какой-нибудь
тайм
бездушный где я скажу что через 3
секунды Мне необходимо будет удалить А
ну точнее поменять лаг visible на false
да то есть я делаю Set visible на false
меняю состояние и теперь р я буду
показывать вот по этим вот условиям Да
если visible тогда header вот нам это
поможет сейчас немного рассмотреть
ситуацию хр по умолчанию есть но через 3
секунды Он исчезает Да но таймер мы
сейчас Не чистили поэтому таймер
продолжает
тикать и вот ну бывают такие ситуации и
поэтому
А для того чтобы при удалении компонента
очищать вот эти всякие там слушатели
интервалы тайм-ауты и так далее в Ю
эффекте
с пустым списком зависимости Да потому
что опять же этот эффект отработает
когда компонент будет за рендере мы
можем
вернуть
функцию которая будет это всё дело
очищать то есть здесь мы можем написать
функционал позволяющий очистить всякие
там опять же интервалы и прочее вот то
есть я могу здесь написать
клинг Теперь смотрите ждём 3 секунды
И как только у нас исчезает р видите у
нас появляется строчка cleaning то есть
вместо коло Да теперь мы можем написать
Clear инвал и сюда передаём экземпляр
этого интервала теперь у нас не будет
утечек памяти то есть теперь это
правильно написанный код Вот это тоже
одно из
применений Ю эффекта вот естественно
давайте мы не будем удалять наш р но
таким образом вы тоже можете тестировать
вернёмся в Effect Action и здесь я хочу
показать следующий пример использование
ю эффекта для того чтобы делать Запрос к
серверу к Кэн и асинхронно выводить
какие-либо элементы а сразу же покажу Ну
это у нас большая тема такая достаточно
покажу как это
делать с разными лоде и прочим Давайте
заведём состояние значит динг и Set
н по умолчанию он будет равняться лсу То
есть у нас не будет никакой загрузки
происходить
это этот функционал чтобы он нам не
мешал мы можем
вынести вот сюда в одну строчку чтобы
всё это было как мы будем делать запрос
Давайте перейдём на
J просто пишем в Гугле и переходим на й
ссылки предположим мы будем получать
здесь
пользователей сюда и вот наша ссылочка
значит как не нужно делать запросы в
реакте Ну мы можем подумать что
А здесь когда определяется компонент мы
вызываем ч вставляем сюда URL Ну и там
дальше начинаем уже
делать функцию
асинхронной ждать пока там фч выполнится
и так далее так делать точно не нужно
Почему Потому что механика реакта
устроена таким образом что каждый раз
когда меняется стейт компонент заново
создаётся он рендерится и каждый раз мы
будем делать эти запросы который будут
улетать на сервер в лучшем случае мы
заспамить забанены в худшем случае мы
войдём в рекурсию из-за постоянной
перерисовки и всё наше приложение просто
сломается Поэтому в данном случае мы
используем
use с пустым набором параметров потому
что пока мы не зависим ни от какого
состояния и здесь мы уже можем
а делать запрос Значит сам запрос я пишу
В отдельной асинхронной функции которую
я назову fch
users здесь мы делаем А ну с помощью
нативного ча я буду делать запрос
получаем
НС и дальше мы получаем данные
Да рано A resp J то есть мы их приводим
непосредственно
к жена вот у нас есть
данные и после
этого можем даже назвать их users потому
что мы точно здесь получаем
пользователей нам потребуется ещё одно
состояние
users Set users по умолчанию это будет у
нас пустой массив то есть пока
пользователей нет но как только мы их
загрузили мы будем делать Set users
на users После этого мы можем сделать
Set А как только начали грузить мы
сделаем Set на видите как точечно мы
управляем вот этими
состояниями в каждый момент того что
происходит но я хочуть ше внимание на то
что здесь я только описал
функционал запросу на
сервак я не вызываю эту функцию эту
функцию я вызываю в самом use эффекте
таким образом если её вызвать где-то вне
то Ничего работать не
будет И теперь нам осталось
только это всё визуально отобразить но
здесь мы можем так написать если у нас
состояние
Дин тогда мы будем показывать
какой-нибудь параграф где будет написано
можем кстати
посмотреть Вот видите у нас показывается
динг быстро но потом Он исчезает потому
что данные уже загрузились
соответственно если у нас не
динг то тогда мы можем
показывать
А давайте здесь я покажу список
ur и дальше мы здесь
будем в нём отображать GSX то есть мы
пробежимся по нашему ту users Map User
Ну и для каждого элемента будем
выводить смотрите Да У каждого
пользователя есть данные нам в целом не
так важно какие они там вот ID есть и
есть name то есть будем их
использовать значит здесь я добавляю
помните когда есть у нас список нам
необходим этот параметр чтобы понима
вообще что происходит Значит это у нас
будет User ID А сюда мы будем
вводить User name такая примерно логика
Давайте
посмотрим Ну и как видите великолепно
абсолютно То есть у нас появляется
список уже реально пользователей который
прилетел с бэнда мы можем легко в этом
убедиться если перейдём во вкладку
Network и вот у нас пользователи prw вот
их данные которые
нам любезно предоставит json
placeholder так Нам нужен ещё отступ вот
этой
кнопочки margin
Bom
1м всё
и Как видите загрузка данных успешно
произошла то есть таким образом это и
работает в реакте кста видите Каждый раз
когда мы переходим происходит
загрузка
и ещё раз хочу пробежаться вот по этой
логике Да а почему всё-таки это в Ю
эффекте находится Представьте если бы мы
это сделали вот без ю эффекта Ну вот
скажем таким вот вульгарным
образом мы сразу же получаем
Да ошибку что слишком много рендеров да
происходит достигнуть лимит из-за
бесконечного цикла потому
что как бы компонент начинает быть
инициализирован создаёт там свой раз
вызывается функция но в функции
происходит сразу же изменение стейта и
он начинает снова рендерится а тут снова
как бы изменение стейта понимаете идею
из этого проходит бесконечный ксть
катери деть
и благодаря тому что у него нет списка
зависимостей никаких в таком случае он
может ну он один раз вызовет эту функцию
и всё больше к ней не будет
[музыка]
[музыка]
данных но данный код он не совсем
корректен с точки зрения того как
работает react и сейчас я поясню Почему
И как мы это можем исправить Ну заодно
ещё одну фишку разберём то есть смотрите
что происходит когда мы формируем
асинхронный запрос на сервер Именно
таким
образом мы эту функцию объявляем прямо
внутри react компонента и получается что
каждый раз когда происходит рендер Ну то
есть когда мы меняем соответственно
react видит эти изменения он
перерисовывать шаблон он же каждый раз
заходит в эту функцию и каждый раз
заново её создаёт и получается что так
как мы используем её в Ю эффекте вроде
бы всё хорошо один раз но мы можем в
теории попасть в опять же циклична
зависимость В общем это не совсем
корректно поэтому у нас
есть на самом деле два варианта Ну из
основных подходов как исправить эту
ситуацию чтобы это было корректно в в
первую очередь самый простой способ Мы
можем взять и определение этой функции
вынести непосредственно в сам use Effect
и таким образом что мы здесь его
определили вот эта вот задача Да которая
в Ю эффекте она вызове всего лишь один
раз Ну потому что нет списка
зависимостей и получается тогда что
проблема решена функция создаётся один
раз вызывается и всё нет никаких проблем
да то есть если мы посмотрим на
результат нам
НВ
то вот мы видим что список пользователей
загружается Да и нет никаких проблем то
есть всё хорошо второй вариант он такой
более продвинутый опять же эту всю
тематику мы подробно Разбираем В платной
программе потому что ну она обширная она
требует понимания там более серных
частей
врете номы
можем другой к который называется use
callback и он предназначен как раз-таки
ну для таких ситуаций Когда нам не нужно
чтобы функция создавалась заново у неё
получается будет новый указатель Да
потому что это специфика хранения
функции и объектов в
JavaScript там Смысл в том что Ну
например одинаковый
объект Да мы можем сравнить с таким же
ровно
объектом так я понял смотрите мы создаём
кон а ра а ра
1 мы
создаём b если мы посмотрим а ра B
видите получаем ЛС Хотя объекты
абсолютно одинаковые Смысл в том Да что
у них разные указатели И поэтому они
интерпретируются как абсолютно разные
Так
вот если эта функция она будет
перерисовывать это означает что нужно
будет перерисовывать остальные В общем
элементы в дереве поэтому мы можем грубо
говоря её зашивать так чтобы у неё не
менялся указатель и это как раз-таки
достижимо с помощью вот этого хука USB
Как это работает примерно следующим
образом Значит мы
создаём users это будет результат работы
метода USB и здесь мы уже
указываем код который нам необходимо
выполнить Здесь также Я указываю список
зависимостей если бы здесь были какие-то
элементы от которых зависит наше
состояние я беру это всё сюда вырезаю
делаю э вещь
асинхронным значит users отсюда убираю
вот у нас получился этот users но сейчас
Давайте посмотрим Будет ли он работать
он работает но по правильному так как к
всё-таки зависит от этой функции А у неё
есть изменение состояний то нам также
нужно закинуть е сюда и вот теперь этот
код тоже будет работать но опять же
здесь не стоит увлекаться там как бы с
лком нужно отходить всё-таки от той
задачи которая у вас стоит по
оптимизации
приложения зачастую я вот например писал
бы внутри use эффекта или более
правильно выносил бы там в архитектуру в
отдельные как бы сервисы которые есть
для выполнения запросов или бы Поработал
с ТК quy но это уже более продвинутая
история а тоже про них рассказываем В
платной программе подробно но а
экосистему вы сможете найти информацию
под данным видео
всё возвращаемся к продолжению
разработки и знаете как заключение
вообще теоретической составляющей нашего
вводного курса Я бы хотел всё же
показать вам что такое кастомные хуки
потому что Тема важная тема не то чтобы
супер сложная хочу чтобы у вас было
понимание Как это работает И для этого
Яре следующую задачу давайте у нас есть
список пользователей мы будем ещё их
фильтровать динамически для этого значит
я добавлю здесь фрагмент То есть я
объединён мы знаем что нам нужно завести
Добавить сюда добавить
и как раз-таки это тот случай когда мы
можем автоматизировать немножечко и
улучшить нашу работу с итами через
кастомные хуки смотрите всё очень просто
я создам папочку HS и у меня будет новый
файл здесь который будет называться use
Input JS Обратите внимание что то JS так
как я здесь не буду использовать никакой
GSX это будет чистый JavaScript код я
буду здесь Экспо
функцию которую
назову смотрите как бы любые хуки в
реакте они называются через use и Это
хороший тон да если мы
сигнализирует если я назову это не
[музыка]
но очень сильно пострадает поэтому когда
Я создаю кастомный к а по факту это
какая-то обычная функция
[музыка]
язва соответственно дальше обозначаю что
конкретно мне здесь нужно сделать так
вот мы знаем что при работе с
[музыка]
инпутов помните в хуках и в точнее
кастомные хуки Я прошу прощения уже
позный вечер много контента записал
А хуки типа usate или
Я говорю мы можем использовать только в
рамках компонентов или только в рамках
кастомных хуков так вот кастомный ХК -
это не что иное как обычная функция и
здесь как раз таки мы можем
использовать другие хуки например тот же
самый создавая его локально это то самое
место где Вполне себе это приемлемо
дальше Т мы здесь получаем какое-нибудь
состояние
value и мы можем здесь вернуть на самом
деле что угодно формат мы сами выбираем
Но для инпута Я уже много раз повторил
что нам важно значение value и нам важно
значение onchange а onchange всегда одна
и та же фиксированная функция то есть
она принимает в себя некоторый ивент и
она просто берёт и изменяет это value То
есть а почему бы нам заранее всё это не
прописать потому что мы знаем да что
функционал это будет точно такой и как
ещё
дополнительно мы сюда передадим default
value которая по умолчанию будет
равняться пустой строчки и default value
мы закидываем VI State вот весь наш
простецкий но при этом очень эффективный
очень полезный кастомный хук теперь как
его использовать Зачем вообще мы его
сделали мы его импортируем вместо того
чтобы создавать здесь State Да мы просто
делаем
use input
Здесь мы получаем ипу по факту и - это
просто объект у которого есть ключи
и и так как они присутствуют то а почему
бы нам просто не развернуть ИТ то есть
конечно мы можем написать здесь
ра этом нет
смысла мы просто Можем написать Вот так
вот
и и всё у нас есть binding потому что
теперь Ну давайте Я временно там
где-нибудь в H6 Да
выведу
inp Вот видите он у нас соответствует то
есть всё хорошо работает и теперь кстати
Раз уж Мы дошли до этого
моментам ть наших пользователей в
зависимости от того что присутствует в
этом инпуте как вот момент вывода наших
всех пользователей мы можем их
предварительно
отфильтровать Где на каждой итерации мы
получаем
пользователя и будем делать следующее
User name Давайте приведём его сразу же
к нижнему
регистру L
Case incl
то есть содержит ли он
значит
Input value to Low
Case фильтруем значит наш массив И в
результирующий массив То есть то что
полетит в GSX будет точно содержать то
что находится сейчас в
инпуте обновляем страницу Ну и вот
допустим мы хотим получить
эрвина
эвин видите То есть я начинаю что-то
прописывать и у нас сразу же появляется
вот этот динамический функционал Как по
мне это выглядит очень даже впечатляюще
и сделано это крайне
просто вот функционал который мы как
раз-таки автоматизировали с помощью
инпута Как видите намного проще нежели
работать там с этим опять йм и так далее
и так
далее на этом
дава и сейчас подведём небольшой итог
Итак друзья Я рад вас приветствовать уже
в концовке этого ролика Я надеюсь что вы
кайфанула и вам понравилась подача вам
понравились примеры И вам понравились
объяснения которые Я использовал я
реально очень много времени потратил для
того чтобы сделать качественный материал
Я надеюсь вы это Оцените либо подпиской
на канал либо там подпиской на бусте Но
что более важно я вам рекомендую
ознакомиться с тем что дальше делать
после этого ролика по ссылке в описании
к этому видео вы найдёте материал он
бесплатный где во-первых я вам покажу А
что вы уже знаете из react И что вам ещё
нужно изучить потом вам а будет понятно
какие сторонние библиотеки вам нужно
узнать и вы узнаете про всю актуальную
экосистему которая сейчас есть в реакте
потому что там очень много разных
библиотек фреймворков и я сделал Для вас
отдельный список чтобы вы понимали
вообще куда двигаться на что смотреть и
что изучать Ну помимо всего прочего там
же вы сможете найти а задачи которые
встречают на джунов ской позиции на джун
плюс позиции и На меловской позиции и я
вам покажу как вообще их можно решить а
зная именно технологию react поэтому я
желаю вам успехов Подписывайтесь там на
всякие разные соцсети на меня ставьте
лайки А переходите по ссылочки и будем
рады вас видеть с командой в других
видео
Ask follow-up questions or revisit key timestamps.
Владилен Минин представляет базовый курс по React, охватывающий путь от основ до продвинутых концепций. В видео объясняется философия библиотеки, основанная на компонентах, сравнивается декларативный подход React с императивным JavaScript. Рассматриваются ключевые темы: работа с JSX, пропсы, хуки useState, useEffect и useRef, порталы, стилизация через CSS-модули и Styled Components, а также взаимодействие с API и формами.
Videos recently processed by our community