React JS #15 Контекст (React Context)

  Рет қаралды 28,861

webDev

webDev

5 жыл бұрын

#YauhenK #webDev #React #Redux #ReactRouter
Всех приветствую в курсе «React JS».
В данном видео-курсе мы с вами рассмотрим базовые понятия библиотеки React JS. Научимся создавать свои компоненты приложения. Разберёмся, как подключается и как работает React Router и с его помощью напишем простое одностраничное приложение. А так же рассмотрим такой подход контроля данных в приложении, как Redux.
Дополнительные темы, которые мы рассмотрим:
- Валидация пропсов с помощью библиотеки PropTypes
- Работа с реальным API
- Создание роутинга одностраничного приложения с помощью React Router
- Работа с менеджером состояний Redux
✒ Репозиторий курса:
✔ GitHub: github.com/YauhenKavalchuk/re...
✒ Полезные курсы на канале:
✔ ES6: • ES6
✒ Используемые ресурсы и инструменты:
✔ Atom (Редактор кода): atom.io/
✔ Create React App (рабочее окружение): github.com/facebook/create-re...
✔ React Developer Tools (расширение для браузера): chrome.google.com/webstore/de...
✔ Redux Devtools (расширение для браузера): chrome.google.com/webstore/de...
✔ Redux Devtools (репозиторий): github.com/zalmoxisus/redux-d...
✔ Fake online REST API (моковый API): jsonplaceholder.typicode.com/
✔ Hacker News (ресурс): hn.algolia.com/?query=&sort=b...
✔ Hacker News (описание API): hn.algolia.com/api
✔ Redux-LocalStorage-Simple (репозиторий): www.npmjs.com/package/redux-l...
✒ Полезные ссылки:
✔ React (документация): reactjs.org/docs/getting-star...
✔ Redux (документация): redux.js.org/
✔ React анимации (документация): reactcommunity.org/react-tran...
✔ Redux (документация): redux.js.org/
✔ React lifecycle methods +16.3 (ресурс со ссылками): projects.wojtekmaj.pl/react-li...
✔ React lifecycle methods less 16.3 (картинка): webjustify.com/wp-content/upl...
✔ React Transition Group (документация): reactcommunity.org/react-tran...
✔ React Router (репозиторий): github.com/ReactTraining/reac...
✒ Полный список готовых и планируемых курсов:
✔ Trello: trello.com/b/R6rD7qq8
✒ Автор курса:
✔ KZbin: / yauhenkavalchuk
✔ Instagram: / yauhenkavalchuk
✔ Twitter: / yauhenkavalchuk
✔ VK: YauhenKavalchuk
✔ LinkedIn: / yauhenkavalchuk
✔ GitHub: github.com/YauhenKavalchuk
✔ VK (Группа): webdevcom
✒ Поддержать развитие канала: github.com/YauhenKavalchuk/yo...

Пікірлер: 105
@stickpunx9344
@stickpunx9344 5 жыл бұрын
Четкие уроки! Круто что рассказываете все лайфхаки, которые не объясняют другие)
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо большое за отзыв!
@NazarMalyy
@NazarMalyy 3 жыл бұрын
Спасибо! Четко и лаконично! Straight to the point!!!! Respect!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо за отзыв!)
@aysommer
@aysommer 4 жыл бұрын
Отличное объяснение, спасибо.
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Пожалуйста
@Alex_Delina
@Alex_Delina 4 жыл бұрын
спасибо! все круто объяснил)
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Пожалуйста
@diyaudioby4836
@diyaudioby4836 2 жыл бұрын
Этот материал здорово помог понять, что есть контекст и как его в реакте юзать )
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
👍
@mokkamokka4097
@mokkamokka4097 5 жыл бұрын
Снова огонь, спасибо!
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Пожалуйста!)
@user-yg8nh2ek6w
@user-yg8nh2ek6w 5 жыл бұрын
Серый Мокко)
@azimkhanabdulsatarov9887
@azimkhanabdulsatarov9887 8 ай бұрын
Спасибо за урок. Все четко и понятно!
@YauhenKavalchuk
@YauhenKavalchuk 8 ай бұрын
Всегда пожалуйста
@dmitryivanov3200
@dmitryivanov3200 5 жыл бұрын
Супер!!! Молодец!
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо большое!
@TORREScs
@TORREScs 5 жыл бұрын
Спасибо! отлично
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Пожалуйста!
@maxet2374
@maxet2374 2 жыл бұрын
Этот канал - просто о сложном
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
👍
@yusufrahimov9160
@yusufrahimov9160 Жыл бұрын
Я очень благодарен за этот видеоурок. 🤝 Он был настолько понятным и легким в усвоении. 🧩
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@rolton6307
@rolton6307 Жыл бұрын
наконец-то я нашёл норм видос по useContext, спасибо
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@marinat201
@marinat201 3 жыл бұрын
Отличный пример 👍
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Спасибо
@voodooshtv7883
@voodooshtv7883 2 жыл бұрын
отличное объяснение !
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
Спасибо
@OlegMemer
@OlegMemer 3 жыл бұрын
Спасибо!
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Пожалуйста
@rasim.ismayilov
@rasim.ismayilov Жыл бұрын
Дай вам Бог здоровья добрый человек)
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Спасибо
@ultraduck100
@ultraduck100 3 жыл бұрын
спасибо, Евгений. изучаю реакт и хочу написать приложение где хорошо бы было разделить ui и логику, а в редакс пока вникать не хочу. так что вы довольно хорошо помогли понять как это сделать
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Приятно слышать)
@Zluka366
@Zluka366 5 жыл бұрын
спасибо!
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Пожалуйста!
@suvacodemorcego
@suvacodemorcego 4 жыл бұрын
Я бразилец и не могу писать на португальском, но ваше видео мне помогло !!! Спасибо !!! Sou brasileiro e nao consegui conteudo em portugues, mas seu video conseguiu me ajudar !!! Obrigado !!!
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
It is nice to hear it. I hope you know English!) Thanks!
@radist126
@radist126 Жыл бұрын
Блин! Это лучший урок по контексту. Кучу других пересмотрел и нихрена не понял. Здесь на пальцах!
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Спасибо
@chessclub92
@chessclub92 Жыл бұрын
Спасибо ,
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Пожалуйста
@alex330k47
@alex330k47 5 жыл бұрын
Все круто, понятно и методично. По моему скромному субъективному мнению улучшить ролики можно убрав из них слова о представлении автора, имя и фамилию можно просто выводить с низу аккуратной плашкой(как это делают кореспонденты новостей) пока автор рассказывает о теме видео, имхо.
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо большое за подробный отзыв!
@AlBert-ks4xq
@AlBert-ks4xq Жыл бұрын
Отлично объяснил. Минимум воды
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
Спасибо
@SageMindWhisper
@SageMindWhisper 5 жыл бұрын
Штука прикольная, но на практике юзается не очень часто. В частности из-за того, что все привыкли к редаксу
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Инфа 100%)))
@SageMindWhisper
@SageMindWhisper 5 жыл бұрын
=)))
@user-vv6jx8qg4v
@user-vv6jx8qg4v 4 жыл бұрын
Редакс очень громозкий.
@maratgumerov2840
@maratgumerov2840 3 жыл бұрын
Здравствуйте. Поясните пожалуйста (на счетчике видео 6:54) - Если мы в 32й строке value присваиваем стрингу. То почему мы в строке 21 используем title а не value... и почему. Спасибо
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Потому что внутри consumer в функции, я переопределил имя с value на title)
@maratgumerov2840
@maratgumerov2840 3 жыл бұрын
@@YauhenKavalchuk а где про этот момент можно найти информацию. Может где то в доках?
@jamjam3337
@jamjam3337 Жыл бұрын
👍
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
👍
@user-vi1jf3xb3e
@user-vi1jf3xb3e 2 жыл бұрын
Идеально подойдет для вхождения в тему Context, но потом лучше почитать официальную документацию в React тк многое опущено.
@YauhenKavalchuk
@YauhenKavalchuk 2 жыл бұрын
В уроках, к сожалению, всё не расскажешь...
@user-sy2oq4vd1n
@user-sy2oq4vd1n 5 жыл бұрын
Подскажите пожалуйста, если мы присваиваем результат вызова функции createContext в переменную TitleContext и далее используем в компонентах TitleContext.Provider и TitleContext.Consumer, то как быть с модульностью? Как получить доступ к переменной TitleContext, если вложенные компоненты расположены в разных файлах? Нужно создать эту переменную в отдельном файле, а потом импортировать её в нужные файлы?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Создание контекста можно вынести в отдельный файл. После чего импортировать его, как обычный модуль в требуемые компоненты. Похожий пример есть в обои подкастах по Реакт, на канале)
@user-sy2oq4vd1n
@user-sy2oq4vd1n 5 жыл бұрын
@@YauhenKavalchuk Спасибо! :)
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Пожалуйста)
@arturrudenko3673
@arturrudenko3673 3 жыл бұрын
А как возможно предавать методы компонента-родителя дальше по дереву через контекст? У меня получилось предать метод, добавив вот такое поле в объект контекста 'clickHandler: () => this.handleClick.call()'. Хотелось бы узнать, есть ли альтернативная запись для этого
@user-qj2yg1rn3j
@user-qj2yg1rn3j 5 жыл бұрын
ну это конечно прикольно. Я бы сказал в самом начале пути меня это прокидывание пропсов через компоненты сильно бесило. Отличная замена)
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Благодаря этой идее, на некоторых проектах начинают отказываться от Redux
@kefyru
@kefyru 5 жыл бұрын
Во первых, БОЛЬШОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО за твои уроки, очень понятно и доходчиво... На них освоил js с нуля, затем react, mobx... пишу вот приложеньку на react-native... Есть вопросец: использую react.context (static contextType = ... ; const context = this.context...). Все замечательно работает, разобрался (с твоей помощью), но постоянно мозолит глаза (в WebStorm) - this.context перечеркнуто и подсвечивает "Deprecated symbol used...". Пакеты: react@16.8.3, @types/react@16.8.22... Уже весь гугл перешерстил - ничего не нашел. Жить конечно можно, но раздражает. Если есть идеи как победить буду спасибо)
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Спасибо за отзыв. Видимо ругается на то, что вы используете устаревший синтаксис context. На канале есть плейлист react videocast там я рассказываю о новом синтаксисе контекста. Если проще, то теперь используется статическое свойство
@kefyru
@kefyru 5 жыл бұрын
@@YauhenKavalchuk Пересмотрел видеокаст... Я так и делаю: в своем классе добавляю [static contextType = myContext;] а в рендере [const _context = this.context;]. Работать работает, контекст передается и в нем лежит именно то что нужно, но в редакторе (WebStorm) подсвечивает что deprecated... Может я как то неправильно typescript настроил? Или чего то не понимаю...
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Тогда, возможно, проблемы в настройках
@user-hw2mo6ty2n
@user-hw2mo6ty2n 5 жыл бұрын
Подскажите, я так понимаю контекст - это замена Redux на уровне самой библиотеки?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Ну в целом, да. По ключевой роли - очень похоже. Хотя думаю, для действительно больших приложений не применимо.
@dimagolysh
@dimagolysh 3 жыл бұрын
А если, например, на втором уровне тоже пробрасывается контекст, он не перезапишется? Как его использовать правильно? Тоже врапнуть в ещё один контекст консумер?
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
А зачем вам нужно 2 контекста? Почему не определить все нужные данные в одном? Подход, как в Redux - стор для хранения всего
@jenyaspace
@jenyaspace 5 жыл бұрын
Можно ли делать тоже самое только наоборот, снизу вверх по иерархии компонентов?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Нет, данные всегда идут сверху вниз, т.е. от родителя к ребёнку. Это однонаправленный поток данных, точно так же, как и в Redux.
@jenyaspace
@jenyaspace 5 жыл бұрын
@@YauhenKavalchuk Но как тогда можно что-то сделать в родителе если что-то меняется в ребенке
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Для этого есть или стейт, или контекст. Эти данные вы пробрасываете в ребёнка в виде пропсов, или контекста. Там их меняете, родитель видит изменения в объекте за которым он наблюдает и обновляется.
@anastasiiam5429
@anastasiiam5429 4 жыл бұрын
Спасибо за видео! А можно через этот метод передавать данные от детей к родителю?
@YauhenKavalchuk
@YauhenKavalchuk 4 жыл бұрын
Можно. Фактически, это нативная реализация Redux
@anastasiiam5429
@anastasiiam5429 4 жыл бұрын
@@YauhenKavalchuk Можно реализовать передачу на прямую или всеравно использовать коллбек?
@ineptDev
@ineptDev 5 жыл бұрын
Функция внутри TitleContext.Consumer выступает как компонент внутри, без имени, или как? Потому как здесь нету вызова этой анонимной функции... Или я чего-то недопонял?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
На текущий момент синтаксис "контекста" чуть упростился. Можете посмотреть плейлист React podcast, там есть пример
@ineptDev
@ineptDev 5 жыл бұрын
@@YauhenKavalchuk окей, спасибо.
@jenyaspace
@jenyaspace 5 жыл бұрын
что означает синтаксис {title => {title}}? а как можно сделать через контекст если надо от родителя к ребенку просто передать булевое значение что типа ребенок используется в этом родителе или нет?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Это синтаксис стрелочной функции: () => {}; Если передать от родителя к ребёнку, то контекст вам вообще не нужен, достаточно пропсов. Контекст используется, когда значениея нужно передавать через несколько уровней, минуя эти уровни.
@jenyaspace
@jenyaspace 5 жыл бұрын
@@YauhenKavalchuk Спасибо, так в том то и дело что компонент содержит еще много уровней к ребенку, поэтому не хотелось бы использовать пропсы
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Я понял, просто звучало по другому, но не суть. Попробуйте повторить пример как в виде, просто заменить значение со строчного на булевое.
@jenyaspace
@jenyaspace 5 жыл бұрын
Но что делать если компоненты находятся в разных файлах, родитель и ребенок, как тогда настраивать контекст?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Подключать библиотеку для контроля за состояние Redux, MobX. Или всё-равно находить родителя и оборачивать компонент
@iGotton
@iGotton 4 жыл бұрын
+
@singlebw4065
@singlebw4065 4 жыл бұрын
Я вообще не понял прикола существования createContext. С таким же успехом можно создать файл storeContext создать там обычный объект, импортировать его в index положить в него нужные данные, импортировать в нужный компонент и получить эти данные. Работает в точности так же. При всём при этом оборачивать ничего не нужно ни в какие Provider и Consumer. А создать в отдельном файле чтоб не было подключений import export в обе стороны. А ещё использовав Consumer мы не имеем доступа к значениям выше методы render в классах, приходиться использовать специальное свойство класса static contextType = Context. после можем обращаться к объекту context. Но как я и сказал обычный объект это спокойно решает.
@p_levin
@p_levin 5 жыл бұрын
Разве нельзя импорт сделать с передачей необходимых state или методов?, прослушка событий? Это все выглядит довольно грязно и это норма в React?, где красота)?
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
Контекст - это новое API, которое было добавлено. С версией 16.6 синтаксис немного упростился - нету лишних обёрток. А вообще импорт стейта и методов - это не по канонам React, скажем так). Но в целом API очень полезное, если вы работали с Реакт длительно время, то оно действительно помогает решить Props Drilling, а этого, раньше, и не хватало)
@sia4281
@sia4281 Жыл бұрын
useContext
@YauhenKavalchuk
@YauhenKavalchuk Жыл бұрын
👍
@olezhonnv3215
@olezhonnv3215 3 жыл бұрын
А что мешает создать банальный объект и в него положить данные? А там, где нужно, эти данные из объекта считать. По сути, в этом уроке показано сохранение данных в контекст через Провайдер, и извлечение данных через Консумер. Такой себе наворот поверх обычного объекта, который может то же самое. Но тут еще провайдер, консумер, функция для извлечения. Ну мудрят хлопцы - им реально нечем там заняться в Фейсбуке, или где там тот Реакт делают :-)
@olezhonnv3215
@olezhonnv3215 3 жыл бұрын
Скорее всего, есть юзекейсы, где нужен именно такой контекст, а простой объект не подойдет. Мне просто Реакт заходит через силу, потому что по работе надо разобраться. Постоянно ищу в нем недостатки.
@olezhonnv3215
@olezhonnv3215 3 жыл бұрын
Как классно работалось раньше - не было всего вот этого замеса из кучи технологий. На пхп и жквери любой сайт делался.
@miangel0
@miangel0 3 жыл бұрын
крик души
@YauhenKavalchuk
@YauhenKavalchuk 3 жыл бұрын
Уж как есть
@RagazzoKZ
@RagazzoKZ 5 жыл бұрын
На react context api можно сделать свой redux. А этот сам redux выкинуть, нах он нужен, он ужасен
@YauhenKavalchuk
@YauhenKavalchuk 5 жыл бұрын
В целом это возможно, но я знаю осень много людей, которые бы поспорили с вами!
@user-vv6jx8qg4v
@user-vv6jx8qg4v 4 жыл бұрын
В redux при изменении стор перерендривается только те компоненты которые подписаны на него, а контекста получается рендрится все начиная с корневого компонента.
@user-he8ln6ii2y
@user-he8ln6ii2y 5 ай бұрын
Спасибо!
@YauhenKavalchuk
@YauhenKavalchuk 5 ай бұрын
Пожалуйста
44 - React JS Практика - Context API
43:18
IT-KAMASUTRA
Рет қаралды 108 М.
Alat Seru Penolong untuk Mimpi Indah Bayi!
00:31
Let's GLOW! Indonesian
Рет қаралды 15 МЛН
I Can't Believe We Did This...
00:38
Stokes Twins
Рет қаралды 81 МЛН
NERF WAR HEAVY: Drone Battle!
00:30
MacDannyGun
Рет қаралды 50 МЛН
React JS #12 Ссылки (Refs)
9:47
webDev
Рет қаралды 18 М.
Открываем все секреты React Context API
1:01:11
АйТи Синяк
Рет қаралды 21 М.
ПОЛНОЦЕННЫЙ ГАЙД ПО REACT CONTEXT
35:45
Ayub Begimkulov
Рет қаралды 9 М.
Знакомство с Zustand - лучшей заменой Redux
29:35
Михаил Непомнящий
Рет қаралды 29 М.
Alat Seru Penolong untuk Mimpi Indah Bayi!
00:31
Let's GLOW! Indonesian
Рет қаралды 15 МЛН