Free React For Beginners
3.46K subscribers
231 photos
5 videos
1 file
385 links
💻 Про #React та #frontend та #веб розробку
🧑‍🎓 Для початківців і не тільки

👉 https://www.youtube.com/@reactdev
Download Telegram
Навіщо потрібен React.Context і як не відстрелити собі ногу

Контекст в #React це засіб передачі даних та сутностей всередині застосунку.

Найкраще він підходить для двох речей:

Зберігання даних що потрібні всьому застосунку і які майже ніколи не змінюються, а їх зміна має призводити до перемалювання більшої частини застосунку, наприклад:

1. Дані користувача та стан аутентифікації
2. Локаль та часовий пояс
3. Налаштування теми, якщо ви використовуєте CSSinJS

Передачі сервісів, які потрібні всьому застосунку:

1. Ваша обгортка над fetch або налаштований екземпляр axios
2. Обгортка над LocalStorage, SessionStorage, IndexedDb
3. Обгортка над Navigator

Використання цих сервісів через контекст (а не напряму) дасть вам можливість легко протестувати код який їх використовує. Для цього достатньо лише передати фейкову реалізацію сервісу через провайдер і код готовий до тестування. Поставте 🤝 якщо потрібен окремий приклад такого підходу (викладу на gist)

Чому не використовувати контекст у якості стейт менеджера? Відповідь дуже проста - швидкодія. Коли змінюється значення контексту, всі хто використовує useContext з цим контекстом будуть перемальовані автоматично. Оскільки контексти зазвичай знаходяться "згори", а більшість наших компонентів функціональні, це призводить до перемалювання майже всього застосунку що може дуже не очікувано вилізти боком під час подальшого розвитку застосунку.

А якщо у вас є дані які потрібні по всьому застосунку і які часто змінюються - використовуйте стейт менеджер, наприклад RTK або MobX. Вони спроектовані саме для цього.

Хто дочитав - тримайте маленький лайфак:

Якщо ваші дані ніколи не змінюються - використання Context.Provider взагалі не обов'язкове. React буде використовувати ті дані що ви передали під час створення контексту 😎. А разом з кастомною обгорткою над useContext створення та використання сервісів стає дуже простим.

Корисно? Тоді закиньте 20 гривень на збір на "електрохарчування" для підрозділу 112 бригади ТРО - це дуже важливо, хлопці вирушають на 0. Ще й шанс виграти гарну і корисну книжку або гільзу від ППО.

Дякую пану Дмитру за ідею для допису,

Бережіть себе, допомагайте ЗСУ
,
@reactbeginners
🤝5113👍9
Цей тиждень буде дуже насиченим.

1. Вже сьогодні, о 19:00 виходить нове відео: Next.JS та побудова API. Десять хвилин але дуже насичені та корисні.
2. В цей четвер, о 19:00, разом з @FwDays буде войс чат про ідеальний фреймворк і чи є #NextJS таким. Без спойлерів)
3. В суботу (а що робити) буде прямий ефір про API в Next.JS під кодовою назвою - як розпарсити монобанку. (лінка пізніше)

Сподіваюся буде корисно, бережіть себе та допомагайте ЗСУ,
@reactbeginners
❤‍🔥20👍722
Ось так мене поздоровив @FwDays на день народження)

Дякую вам! Єдине про що шкодую - навряд чи зможу потрапити до вас на конфу в цьому році. А ті хто зможе - сходіть не пожалкуєте!

Та не думайте що я дякую лише великим внескам. Дякую і Чорнобаянам, і Житомиру, і тим хто скидає "не багато, але від щирого серця" і тим хто пішов у термінал аби поповнити збір і тих хто по декілька разів)) Ви великі молодці, я радий бути одним з вас!

Загалом ми вже зібрали 38_288 з 63_491 гривні, тобто 60% збору! Найбільші донати - 10_000 грн. (відмовились приймати участь в розіграші книги). та 5_000 грн.

Продовжуємо, більша частина вже пройдена!
21👍8
Відео про Next.JS та API вже доступне для перегляду

План:


- Навіщо нам API
- Як будується раутинг для API
- Як отримати параметри запиту
- Як відповісти на запит
- Та про деякі нюанси використання API в #NextJS

Єдиний мінус - схоже я знову зі звуком облажався, хоч плач(

Тим не менше, як бачите - я не тільки з вас гроші прошу, а ще й щось корисне роблю 🙂До речі, обіцяний приклад з тестування контексту вже готовий, буде теж сьогодні.

Бережіть себе, допомагайте ЗСУ,

@reactbeginners
🔥18👍123
Free React For Beginners
Навіщо потрібен React.Context і як не відстрелити собі ногу Контекст в #React це засіб передачі даних та сутностей всередині застосунку. Найкраще він підходить для двох речей: Зберігання даних що потрібні всьому застосунку і які майже ніколи не змінюються…
Як #React контекст допомагає в тестуванні

Найкращий спосіб пояснити - показати на прикладі. Відкрийте цей гіст і давайте його розберемо

1. Створюємо об'єкт API який буде відповідати за комунікацію із зовнішнім світом і кладемо цей об'єкт в контекст за допомогою createContext
2. В довільному компоненті витягуємо об'єкт API з контексту і використовуємо його.

Поки все зрозуміло, правда? Та "магія" починається далі.

3. В нашому тесті, ми створюємо новий об'єкт API який буде більш підходящий для тестування - він не ходить в мережу, а просто повертає проміс з гарантованим результатом. Далі, ми огортаємо компонент який бажаємо протестувати в ApiContext.Provider, а в value - підсовуємо йому нашу фейкову реалізацію.

Коли React рендерить наш тестовий компонент, він знаходить наш провайдер і замість справжньої реалізації бере нашу нову, фейкову яку і використовує. Так ми можемо протестувати будь-які дані та симулювати будь-які помилки. Спробуйте, наприклад, замість Promise.resolve передати Promise.reject і побачите що станеться з цим компонентом якщо, наприклад не буде інтернету)

Питаннячка?)

П.М. Доречі, код робочий можете спробувати, треба тільки vitest доналаштувати для тестів

Бережіть себе, допомагайте ЗСУ,
@reactbeginners
9🔥3
Сьогодні Voice Chat про ідеальний фреймворк

🚀Час: 11.04 (Чт) о 19:00
🗣Спікери: Віталій Рубан, Дмитро Брагінець, Володимир Сень

Войс чат буде проходити на каналі FwDays, приєднуйтесь!
👍14🔥42
ЗБІР ЗАКРИТО! ЗВІТ ТА РОЗІГРАШ НА НАСТУПНОМУ ТИЖНІ!

Збір завмер майже на самому фініші - залишилося зібрати 7_910 гривень і я знову буду мучати вас матеріалами про
#React

А щоб все було чесно - мої 3000 гривень теж пішли на збір. Долучайтеся, поширюйте, залишилося ще трохи!


1. І трохи статистики - найбільша пожертва 10_000 гривень
2. Кількість людей що вже прийняли участь - більше 110 осіб
3. Кількість організацій що прийняли участь - 1, дякую Fwdays
4. Найкращий коментар - "Не багато, але від щирого серця!"

Кожні 50грн - шанс виграти розфарбовану гільзу від ППО, якими Київ відбивав шахедів

Всім дякую, давайте сьогодні дотиснемо аби на цьому тижні все передати
👍104🎉2
💪 Збір закрили, а ефір ніхто не відміняв!

🗓 Отже, плануйте cуботній вечір на 19:00 - буде в нас учбово-помилковий ефір про Next.JS, API та Монобанк.

Поговоримо про API та CORS, напишемо невеличкий застосунок який буде ходити в монобанку і тягти звідти зміни, так щоб у нас був лог останніх поповнень.

🎁 А ще розіграємо подаруночки)) Правда гільзи від художниці приїдуть тільки у вівторок, але це найкращий момент все одно.

Лінк на ефір буде вже завтра, як раз ще раз і нагадаю 😈.

Бережіть себе, ви допомогли ЗСУ


@reactbeginners

Нє ну ви ж не думали що я від вас так просто відстану?)
👍26😁2❤‍🔥1
Free React For Beginners
💪 Збір закрили, а ефір ніхто не відміняв! 🗓 Отже, плануйте cуботній вечір на 19:00 - буде в нас учбово-помилковий ефір про Next.JS, API та Монобанк. Поговоримо про API та CORS, напишемо невеличкий застосунок який буде ходити в монобанку і тягти звідти зміни…
Обіцяне посилання на сьогоднішній ефір про #NextJS, API та монобанк який відбудеться вже сьогодні о 19:00.

Ставте нагадування, беріть чоловіків, жінок, котів, собак, єнотів і приходьте (павуків не беріть 😂). Має бути цікаво і сподіваюся монобанк мене не забанить після цього ефіру)

Почуємось о 19:00!

Пост був змінений в зв'язку з помилкою в обкладинці. Все в силі.
👍24❤‍🔥2
Як писати чистіший код на #React

1. Робіть маленькі компоненти. Не треба складати все в купу, навіть якщо зараз це виглядає зручно - підтримувати потім буде дуже важко.

2. Розділяйте компоненти на ті що отримують дані та ті що їх відображають. Такий підхід спрощує підтримку та тестування.

3. Пишіть мінімум коду в JSX - виносьте його в блок до return. Так у вас буде блок логіки (до return, та блок відображення - те що в return)

4. Виносьте логіку в окремі функції або кастомні хуки. Компоненти потрібні для відображення, бізнес логіка має лежати окремо і бути протестована.

5. Взагалі виносьте з функцій будь-який код, що не залежить від компоненту. Оці всі магічні числа, масиви для дропдаунів - все це геть, чим менше в компоненті коду що його не стосується тим легше його читати та підтримувати.

6. Мінімізуйте useEffect. Використовуйте useEffect лише якщо немає іншого виходу - наприклад для асинхронних запитів. Намагайтеся його уникати.

7. Зберігайте локальний стейт локально. Якщо дані компоненту потрібні лише цьому компоненту - не варто додавати їх в глобальний стор.

8. Гарно спіть та повільно думайте. Вам платять за вирішення бізнес задачі, а не за кількість символів. Ясний розум - одна з основ чистого коду.

Якщо у вас є бажання та готовність пройти CodeReview в прямому ефірі - пишіть в ПМ.

Бережіть себе, допомагайте ЗСУ,

@reactbeginners
76👍15👏2
Звіт-подяка за минулий збір

😍 Ми це зробили, збір зібрано повністю, все закуплено та передано навіть раніше терміну:

Зібрано: 65_111 грн.💪💪💪

Придбано:
- Сонячна панель ECOFLOW 220W: 18_051грн. (офіціали, зробили знижку для ЗСУ)
- Генератор ECOFLOW GASEBDUAL: 43_999 + 190 грн комісія = 44_189
- Ще закупили масла для генератора, але то пішло повз банку, тому 0.

Залишок: 2_871, який я пропоную передати Сергію на збір на машину, може він нарешті його закриє вже)). Якщо ніхто не проти - завтра відправлю.

Найбільша сума: 11_941 від пана Дениса, книжка відправляється йому. Дякую за такий значний внесок, чекай на свій подарунок, думаю тобі сподобається ;)

😉Дві гільзи також вже мають своїх власників і будуть відправлені завтра, чекайте. Я б їх собі залишив, такі вони гарні)

🤗Також дякую усім хто допомагав та поширював цей збір:

BeerJS Житомир
@FwDays
ItJunior
YouDon'tKnowJS
Художниця пані Катерина (анонміно, хоча все зробила безкоштовно та швидко)

❤️❤️❤️Та найбільше дякую усім вам, хто хоча й не був зобов'язаний віддавати свої власні гроші, але все ж таки це зробив. Віримо що рано чи пізно, але у нас буде мир.

Фотозвіт наступним постом)
10👍6
13🔥7👍3
Чернігів, мої співчуття. Просто немає слів 😢
💔65🤯1
Що таке CORS?

Якщо коротко - це запобіжний механізм браузера, який не дозволяє вам отримати відповідь (а іноді і зробити запит) з іншого домену. Розшифровується CORS як: Cross Origin Resource Sharing

Простий приклад як працює CORS

* Я зробив веб сторінку та виклав її в інтернет, наприклад https://drag13.io
* З цієї сторінки я роблю GET запит на сторінку https://stackoverflow.com
* Запит проходить успішно і сервер повертає браузеру відповідь.
* Браузер бачить, що домени різні і перевіряє відповідь серверу на наявність спеціального заголовку: Access-Control-Allow-Origin. Якщо його немає, або його значення не дорівнює домену клієнта, браузер кидає вам абстрактну помилку Failed to fetch

У більш складних сценаріях, перед виконанням основного запиту, браузер зробить попередній, так званий preflight запит для того щоб дізнатися чи можна взагалі відправляти запит.

Для того щоб зробити запит на інший домен, вам потрібно аби сервер повертав спеціальні HTTP заголовки::

Access-Control-Allow-Origin - для ідентифікації дозволених доменів
Access-Control-Allow-Methods - для ідентифікації дозволених HTTP методів
Access-Control-Allow-Headers - для ідентифікації дозволених заголовків
Access-Control-Max-Age - для того аби знати скільки часу не турбувати сервер повторно.

Для простих запитів - наприклад GET, POST, HEAD без додаткових заголовків достатньо повернути Access-Control-Allow-Origin зі значенням дозволених доменів через кому, або з * (але * використовувати не варто)

Зазвичай це налаштовується один раз на проекті тож завчати на пам'ять це не потрібно. Просто треба пам'ятати, що запити на чужі домени з браузеру можуть бути заблоковані, для їх розблокування вам потрібно або налаштувати заголовки, або робити ці запити з власного серверу.

Бережіть себе, допомагайте ЗСУ
@reactbeginners
41👍19🔥2