JavaScript для початківців: 7 проєктів, які варто зробити до React

Знати синтаксис JavaScript недостатньо — потрібно навчитися використовувати його у власних проєктах. Зібрали 7 практичних задач від To-do list до роботи з API, які допоможуть перевірити готовність до React.

7 JavaScript-проєктів для початківців перед вивченням React

Можна подивитися десятки уроків про JavaScript, знати різницю між let і const, розуміти функції, масиви та об’єкти — а потім відкрити порожній файл app.js і не знати, з чого почати.

Це нормальний етап навчання.

Проблема в тому, що знати окремі конструкції JavaScript і вміти зібрати з них завершений проєкт — не одне й те саме.

Саме невеликі самостійні проєкти вчать:

  • розбивати велику задачу на маленькі;
  • працювати з DOM;
  • обробляти події користувача;
  • зберігати стан;
  • використовувати масиви й об’єкти на практиці;
  • працювати з API;
  • обробляти помилки;
  • знаходити власні баги;
  • змінювати програму без повного переписування.

І саме ці навички особливо знадобляться пізніше в React.

Якщо ви ще тільки знайомитеся з frontend, спочатку варто пройти базовий шлях HTML → CSS → JavaScript. Ми детально розбирали його у статті «HTML, CSS і JavaScript: з чого почати веброзробку».

А якщо основи вже зрозумілі — переходьмо до практики.


Зміст статті

7 JavaScript-проєктів: короткий маршрут

Не обов’язково виконувати всі проєкти саме в такому порядку, але складність поступово зростає.

№ПроєктЩо тренує
1To-do listDOM, events, arrays
2Калькуляторfunctions, conditions, state
3Quizobjects, arrays, events, logic
4Weather AppFetch API, async/await, JSON
5Notes ApplocalStorage, CRUD, state
6Каталог з фільтрамиmap, filter, search, rendering
7GitHub Profile FinderAPI, errors, async code, UI states

Головна мета — не просто скопіювати сім tutorial-проєктів.

Після кожного потрібно вміти відповісти:

Чому мій код працює саме так і що станеться, якщо змінити умову?


1. To-do list — список задач

To-do list здається дуже простим проєктом.

Є поле.

Є кнопка.

Користувач вводить:

Купити книгу

Натискає «Додати».

Задача з’являється у списку.

Але за цією простою функцією ховається багато фундаментальних речей JavaScript.

Потрібно:

  1. отримати значення з input;
  2. перевірити, чи воно не порожнє;
  3. створити нову задачу;
  4. додати її до масиву;
  5. показати її в DOM;
  6. дозволити позначити задачу виконаною;
  7. дозволити видалити її.

Тобто один маленький проєкт вже змушує поєднати:

HTML → JavaScript → дані → DOM → події.

Що потрібно потренувати

Передусім:

querySelector()

addEventListener()

createElement()

append()

роботу з масивами;

об’єкти;

функції;

умови.

Наприклад, задача може зберігатися як об’єкт:

{
  id: 1,
  title: 'Вивчити JavaScript',
  completed: false
}

Тоді UI лише показує стан даних.

Це дуже важлива ідея перед React:

інтерфейс повинен відображати поточний стан програми.

Про DOM events можна окремо прочитати в офіційній документації MDN.

Як ускладнити проєкт

Коли базова версія працює, додайте:

  • фільтр «Усі / Активні / Виконані»;
  • редагування задачі;
  • лічильник невиконаних задач;
  • очищення завершених;
  • збереження після перезавантаження сторінки.

Останній пункт приведе нас до localStorage, але про нього трохи пізніше.


2. Калькулятор

Калькулятор — хороший наступний проєкт, тому що тут потрібно вже не лише змінювати DOM, а й правильно контролювати стан програми.

Наприклад, користувач натискає:

12

потім:

+

потім:

7

а потім:

=

Програма повинна пам’ятати:

  • перше число;
  • вибрану операцію;
  • друге число;
  • поточне значення дисплея.

Що тренує калькулятор

Передусім:

  • функції;
  • if / switch;
  • перетворення рядків у числа;
  • обробку подій;
  • стан;
  • крайові випадки.

Наприклад:

Що станеться, якщо користувач двічі натисне +?

А якщо:

поділити на нуль?

А якщо:

натиснути = до введення другого числа?

Саме такі питання перетворюють просту вправу на реальне програмування.

Не використовуйте eval() як основне рішення

Для навчального калькулятора корисніше самостійно визначити операції:

function calculate(a, operator, b) {
  if (operator === '+') return a + b;
  if (operator === '-') return a - b;
  if (operator === '*') return a * b;
  if (operator === '/') return b !== 0 ? a / b : null;
}

Тут одразу видно логіку програми.

А це саме те, що нам потрібно тренувати.


3. Quiz — інтерактивний тест

Третій проєкт — невелика вікторина.

Наприклад:

Який метод створює новий масив із результатів функції для кожного елемента?

Варіанти:

A. filter()

B. map()

C. find()

D. push()

Користувач обирає відповідь.

Програма показує результат і переходить до наступного питання.

Як зберігати питання

Тут уже дуже природно використовувати масив об’єктів:

const questions = [
  {
    question: 'Який метод створює новий масив?',
    answers: ['filter', 'map', 'find', 'push'],
    correct: 1
  }
];

А далі JavaScript:

  1. бере поточне питання;
  2. показує його;
  3. створює кнопки відповідей;
  4. слухає click;
  5. перевіряє правильну відповідь;
  6. збільшує score;
  7. переходить далі.

Що тренує Quiz

Тут особливо добре практикуються:

  • масиви;
  • об’єкти;
  • індекси;
  • функції;
  • умови;
  • DOM rendering;
  • events;
  • стан програми.

А ще можна тренувати методи:

map()

forEach()

filter()

Як ускладнити проєкт

Додайте:

  • progress bar;
  • таймер;
  • випадковий порядок відповідей;
  • різні категорії;
  • екран результатів;
  • можливість пройти тест повторно.

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

Перші JavaScript-проєкти для початківців: To-do list, калькулятор і quiz

4. Weather App — перший проєкт із реальним API

Weather App на JavaScript з отриманням даних через API

До цього моменту всі дані знаходилися всередині нашого JavaScript.

Тепер цікавіше.

Створимо застосунок, який отримує дані з іншого сервера.

Наприклад:

Вінниця
+12 °C
Вітер 14 км/год

Саме тут починається робота з API.

Для навчального проєкту можна використати Open-Meteo — сервіс погоди, який повертає дані у JSON і для базового некомерційного використання не вимагає API key.

Що відбувається під час запиту

У спрощеному вигляді:

JavaScript → HTTP request → API → JSON → JavaScript → DOM

JavaScript надсилає запит.

Сервер повертає дані.

Програма читає їх і показує користувачеві.

Наприклад:

const response = await fetch(apiUrl);
const data = await response.json();

fetch() використовується браузером для виконання мережевих запитів, а async/await дозволяє зручніше працювати з Promise.

Що потрібно показувати в UI

Не робіть тільки сценарій:

усе успішно завантажилося.

Реальний інтерфейс має кілька станів:

Loading

Завантажуємо погоду…

Success

12 °C

Error

Не вдалося отримати дані.

Ці стани особливо важливі перед React, тому що пізніше ви будете керувати ними через state.

Що тренує Weather App

  • fetch();
  • Promise;
  • async/await;
  • JSON;
  • try...catch;
  • роботу з API;
  • loading state;
  • error state;
  • оновлення DOM після асинхронної операції.

Саме асинхронність часто стає однією з головних тем перед переходом до React.

Окремо її можна повторити за документацією MDN про asynchronous JavaScript.


5. Notes App із localStorage

Notes App на JavaScript із збереженням даних у localStorage

Тепер створимо простий застосунок для нотаток.

Наприклад:

Ідеї для проєкту

Купити книгу

Повторити async/await

Користувач може:

  • створити нотатку;
  • редагувати;
  • видалити;
  • закрити браузер;
  • повернутися пізніше й побачити свої нотатки.

Тут з’являється нове поняття:

localStorage.

localStorage дозволяє зберігати дані для конкретного origin у браузері, і вони можуть залишатися доступними між сесіями браузера.

Для об’єктів і масивів зазвичай використовують:

JSON.stringify()

перед збереженням і:

JSON.parse()

після отримання.

Наприклад:

localStorage.setItem('notes', JSON.stringify(notes));

Чому цей проєкт важливий

Після перезавантаження сторінки DOM створюється заново.

Але дані не повинні зникнути.

Тому потрібно зрозуміти різницю між:

даними

і

їхнім представленням на сторінці.

Це дуже корисна концепція перед React.

Що тренує Notes App

  • CRUD-операції;
  • масиви об’єктів;
  • localStorage;
  • JSON;
  • state;
  • DOM rendering;
  • форми;
  • валідацію.

CRUD означає:

Create → Read → Update → Delete.

Цей патерн зустрічається практично всюди: від нотаток до адмінпанелей і великих вебзастосунків.


6. Каталог товарів із пошуком і фільтрами

Тепер перейдемо до проєкту, де особливо корисними стають методи масивів.

Уявімо невеликий каталог:

Навушники
Клавіатура
Миша
Монітор
Ноутбук

Кожен товар має:

  • назву;
  • категорію;
  • ціну;
  • рейтинг;
  • зображення.

Користувач може:

  • шукати товар;
  • вибрати категорію;
  • встановити максимальну ціну;
  • сортувати;
  • очистити фільтри.

Тут починається справжня робота з даними

Наприклад, є масив:

const products = [
  {
    title: 'Keyboard',
    category: 'accessories',
    price: 1500
  }
];

Потім використовуємо:

filter()

для відбору товарів;

sort()

для сортування;

map()

для створення карток.

Наприклад:

const filteredProducts = products.filter(
  product => product.price <= maxPrice
);

Не змінюйте вихідні дані без потреби

Одна з хороших звичок перед React — чітко розділяти:

вихідний масив

і

дані, які зараз потрібно показати.

Наприклад:

products

залишається повним каталогом.

А:

visibleProducts

містить результат пошуку й фільтрів.

Так значно простіше керувати програмою.

Що тренує каталог

  • map();
  • filter();
  • sort();
  • includes();
  • objects;
  • events;
  • forms;
  • rendering;
  • state;
  • роботу з кількома фільтрами одночасно.

Цей проєкт дуже близький до практичного чекліста з нашої статті «JavaScript після основ: коли переходити до React».

Там якраз один із критеріїв готовності — вміння створити невеликий каталог із картками, пошуком, фільтрами, сортуванням та API без копіювання великих готових фрагментів.


7. GitHub Profile Finder — завершальний API-проєкт

Останній проєкт поєднає майже все, що було раніше.

Створимо пошук GitHub-профілю.

Користувач вводить:

octocat

Натискає:

Search

І отримує:

  • avatar;
  • username;
  • ім’я;
  • bio;
  • кількість public repositories;
  • followers;
  • посилання на профіль.

Для цього можна використати GitHub REST API.

GitHub має endpoint для отримання публічної інформації про користувача за username, а публічні дані можна запитувати без авторизації, хоча для API діють rate limits.

Які стани повинні бути

Не обмежуйтеся тільки успішним результатом.

Продумайте:

Початковий стан

Введіть GitHub username.

Loading

Шукаємо користувача…

Success

Показуємо profile card.

Not Found

Користувача не знайдено.

Error

Не вдалося виконати запит.

Це вже дуже схоже на те, як доведеться мислити під час роботи з React.

Що тренує GitHub Profile Finder

Практично весь набір:

  • input;
  • forms;
  • events;
  • API;
  • fetch();
  • async/await;
  • JSON;
  • error handling;
  • conditional rendering;
  • DOM;
  • об’єкти;
  • стан інтерфейсу.

Саме тому я б залишив цей проєкт на кінець.


Не намагайтеся зробити всі 7 проєктів ідеальними

Мета цього списку — не створити сім production-ready застосунків.

На старті набагато важливіше пройти повний цикл:

ідея → структура → код → помилка → debugging → готовий результат.

Один завершений невеликий проєкт часто корисніший за великий застосунок, який залишився на 30%.

Наприклад, для першого To-do list не потрібні:

  • авторизація;
  • backend;
  • database;
  • drag-and-drop;
  • notifications;
  • десятки animations.

Спочатку нехай добре працює базова логіка.

Потім додавайте одну функцію за раз.


Як правильно працювати над кожним проєктом

Є велика різниця між:

«я подивився tutorial і повторив код»

і:

«я можу створити схожий проєкт самостійно».

Тому для кожного проєкту використовуйте приблизно такий процес.

1. Спочатку опишіть функціонал словами

Наприклад для To-do:

користувач вводить задачу → натискає кнопку → задача додається → її можна завершити або видалити.

2. Розбийте задачу

Не пишіть:

«зробити To-do app».

Пишіть:

отримати input;

обробити submit;

додати object у масив;

render tasks;

видалити task.

3. Спробуйте написати рішення самі

Навіть якщо воно неідеальне.

4. Використовуйте документацію

Не обов’язково пам’ятати кожен метод.

Набагато важливіше навчитися знаходити потрібну інформацію.

5. Після завершення змініть умову

Наприклад:

додайте priority;

додайте search;

зробіть dark mode;

змініть структуру даних.

Саме зміна готового проєкту показує, чи ви його справді зрозуміли.


А як користуватися AI під час цих проєктів?

AI може бути хорошим помічником.

Наприклад:

«Поясни, чому цей event listener спрацьовує двічі».

Або:

«Дай мені підказку, але не пиши готове рішення».

Або:

«Перевір мою функцію і скажи, які edge cases я пропустив».

Це корисніше, ніж запит:

«Зроби мені повністю Weather App».

Якщо AI одразу генерує весь код, легко отримати програму, яка працює, але яку ви не можете змінити самостійно.

Хороший критерій:

Я можу пояснити кожен важливий фрагмент коду, який залишив у своєму проєкті.


Які знання JavaScript повинні з’явитися після цих проєктів

Після кількох таких робіт ви повинні значно впевненіше почуватися з:

мовою JavaScript:

  • variables;
  • functions;
  • conditions;
  • loops;
  • arrays;
  • objects;

роботою з даними:

  • map();
  • filter();
  • find();
  • sort();
  • JSON;

браузером:

  • DOM;
  • events;
  • forms;
  • localStorage;

асинхронністю:

  • Promise;
  • fetch;
  • async/await;
  • try/catch;

архітектурою:

  • поділом коду на функції;
  • розділенням даних та UI;
  • керуванням станом;
  • обробкою loading, empty та error states.

Якщо ці поняття поки здаються надто складними, нічого страшного.

Для початківця логічніше спочатку пройти курс Web Development, де навчання починається з HTML і CSS та поступово переходить до JavaScript, DOM, Git і основ API.

JavaScript-проєкти з каталогом, API та переходом до React

Коли після цього переходити до React?

Не потрібно чекати моменту, коли ви знатимете «весь JavaScript».

Такого моменту практично не існує.

Але React стає значно зрозумілішим, коли ви вже можете без бібліотеки:

  • створити інтерактивний DOM;
  • обробити форму;
  • працювати з масивом об’єктів;
  • відфільтрувати й відсортувати дані;
  • отримати JSON через API;
  • показати loading та error;
  • зберегти дані;
  • розділити великий код на функції.

Тоді під час знайомства з React ви зможете побачити:

які проблеми він допомагає вирішувати.

Наприклад, після звичайного To-do list стане зрозуміліше, навіщо потрібні компоненти та state.

Після каталогу — навіщо передавати props.

Після API-проєкту — навіщо керувати loading і error state.

Після ручного оновлення DOM — чому декларативний підхід React може бути зручнішим.

Докладний checklist ми вже зібрали у статті «JavaScript після основ: коли переходити до React».


Який проєкт перенести в React першим?

Не потрібно одразу створювати новий великий React-застосунок.

Візьміть уже знайомий проєкт.

Наприклад:

To-do list.

Спочатку у вас було:

HTML
↓
querySelector
↓
addEventListener
↓
createElement
↓
manual DOM update

Потім спробуйте реалізувати ту саму поведінку через:

components
↓
props
↓
state
↓
events
↓
render

Ви будете думати не:

«Що взагалі повинна робити ця програма?»

а:

«Як знайома програма реалізується в React?»

Це значно простіше.

Після To-do можна перенести:

Quiz → Catalog → Weather App.

Так різниця між vanilla JavaScript і React стане набагато зрозумілішою.


Практичний маршрут: від першого JavaScript-проєкту до React

Якщо потрібна проста послідовність, вона може виглядати так:

1. To-do list
DOM і events.

↓

2. Calculator
Functions і state.

↓

3. Quiz
Arrays та objects.

↓

4. Notes App
localStorage та CRUD.

↓

5. Catalog
map, filter, sort.

↓

6. Weather App
fetch та async/await.

↓

7. GitHub Profile Finder
повноцінна робота з API та UI states.

↓

8. Перенесіть один із проєктів у React.

Не обов’язково рухатися швидко.

Набагато важливіше, щоб після кожного етапу ви могли самостійно змінити власний код.


Поширені запитання

Скільки JavaScript-проєктів потрібно зробити перед React?

Немає магічної кількості.

Сім проєктів у цій статті — це маршрут для практики, а не обов’язкова вимога.

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

Чи потрібно знати весь JavaScript перед React?

Ні.

Але бажано впевнено працювати з функціями, масивами, об’єктами, DOM, events, modules, Promise, async/await та API.

React використовує JavaScript, а не замінює його.

Який JavaScript-проєкт найкращий для початківця?

To-do list — хороший старт, оскільки дозволяє потренувати форми, DOM, events, масиви та оновлення інтерфейсу без складної бізнес-логіки.

Якщо він здається занадто складним, почніть із ще простішого проєкту: лічильника, перемикача теми або генератора випадкового числа.

Чи можна додавати ці проєкти в портфоліо?

Так, але краще додати власні функції та дизайн.

Звичайний калькулятор, повністю повторений із tutorial, мало показує про самостійність.

А калькулятор із власною логікою, адаптивним дизайном, keyboard support і продуманими edge cases уже цікавіший.

Чи можна використовувати AI?

Так, але як помічника.

Нехай AI пояснює помилки, ставить запитання, допомагає знайти edge cases або проводить code review.

Не варто залишати у своєму проєкті великий фрагмент коду, принцип роботи якого ви не можете пояснити.

Що вчити після цих проєктів?

Якщо JavaScript уже не викликає великих труднощів, наступний логічний крок — modern JavaScript, modules, REST API та React.

У LogiCode Academy цьому присвячений курс Frontend Development: JavaScript & React, який переходить від modern JavaScript та async/await до components, state, hooks і routing.


Головне — перейти від уроків до власного коду

JavaScript вивчається не тоді, коли ви подивилися ще один урок про масиви.

Він починає ставати реальною навичкою, коли перед вами є задача:

«Мені потрібно зробити пошук».

І ви самі вирішуєте:

«Тут потрібен input, event і filter».

Або:

«Мені потрібно отримати погоду».

І думаєте:

«Потрібен API, fetch, async/await і стан помилки».

Саме цей перехід від:

«я знаю метод»

до:

«я знаю, коли його застосувати»

і є одним із головних результатів практики.

Не намагайтеся зробити сім проєктів за один тиждень.

Виберіть один.

Доведіть його до робочого стану.

Додайте власну функцію.

Зламайте щось.

Знайдіть помилку.

Виправте її.

А потім переходьте до наступного.

Якщо хочете пройти цей шлях послідовно з практикою та зворотним зв’язком, почати можна з курсу Web Development, а після впевненої бази JavaScript перейти до Frontend Development: JavaScript & React.

Хочете перейти від читання до практики?

Оберіть курс або спробуйте безкоштовне перше заняття.