3 самых популярных фреймворка для JavaScript – это React, Vue и Angular. Vue и Angular действительно являются фреймворками, а вот React называют фреймворком ошибочно, потому что это – библиотека. Разница, на самом деле, не очень велика, потому что React «оброс» паттернами и методологиями, но определенные отличия все же есть – ниже мы расскажем как о них, так и в целом о React: что это, зачем он нужен, почему он стал таким популярным и как его учить.
Итак, React.js – это библиотека для разработки пользовательских интерфейсов. Начнем со слова «библиотека», потому что здесь изучающие часто путаются. Когда речь идет про технологию, расширяющую базовые возможности какого-либо языка, обычно эта технология является либо библиотекой, либо фреймворком. В чем разница:
Фреймворки ускоряют разработку, потому что вам просто нужно добавить бизнес-логику в готовый каркас, но если вы захотите выйти за пределы рамок фреймворка – это будет крайне сложно; библиотека не дает вам каркас, но и не ограничивает в использовании ее инструментов. React – это библиотека, то есть в теории вы можете использовать ее так, как хотите. На практике вокруг React уже давно сформировались «правила хорошего использования», так что некоторые элементы фреймворка у библиотеки тоже есть – если вы придете на проект и будете писать код без учета этих правил, вам быстро объяснят, что так делать не нужно.
С библиотекой разобрались, переходим к «разработке пользовательского интерфейса». Здесь все просто – React позволяет быстро создавать пользовательские интерфейсы. Во многом Реакт стал популярен из-за связки «модульность + декларативность» – ниже объясним, что это. React позволяет создавать интерфейсы любой сложности, при этом их поддержка занимает меньше времени и сил, чем поддержка интерфейсов, написанных на чистом JS или с помощью других библиотек – в том числе из-за этого React и стал таким популярным. К слову, возможности React выходят за рамки браузеров – библиотека позволяет с такой же легкостью создавать графические интерфейсы мобильных приложений
Языки программирования и их производные (в том числе фреймворки/библиотеки) обычно предлагают на выбор один из двух подходов к разработке – императивный или декларативный:
React – библиотека, которая поддерживает декларативный стиль: вы описываете, что и где вы хотите видеть, а библиотека это создает. Да, код для каких-то специфических событий писать все же придется, но React освобождает вас от рутинной работы.
React оперирует компонентами – отдельными сущностями, размещенными на странице. Компонентом может быть как отдельная кнопка, так и вся страница в целом. Что важно: компоненты изолированы друг от друга, даже если они имеют общего «родителя». Из-за этого упрощается чтение чужого кода и ускоряется поиск багов: если вы читаете чужой код, вам достаточно ознакомиться с теми компонентами, которые вас интересуют; если вы ищете баг у кнопки на странице, его нужно искать конкретно в описании компонента «кнопка», а не где-то среди 50 файлов скриптов.
Если вы создаете общего «родителя» для схожих компонентов, поля и методы, которые передаются от родителя к компонентам, не могут быть изменены – так работает однонаправленная передача данных «сверху вниз». Это существенно облегчает разработку, потому что другой разработчик не может в отдельном компоненте, наследующемся от вашего «родителя», полностью изменить логику работы – он вынужден соблюдать правила, которые вы установили.
Виртуальный DOM – инструмент, который решает за вас, когда и что в реальном DOM-дереве нужно будет обновлять. Это освобождает вас от низкоуровневой работы с DOM-деревом – просто представьте, что страница при каждом изменении будет обновляться полностью, а что именно на самом деле будет обновляться, за вас решит виртуальный DOM.
Для создания разметки React использует JSX – разметку, похожую на HTML, но с более жесткими правилами и дополнительными возможностями. К JSX придется привыкнуть, но в больших проектах строгость описания сыграет вам на руку.
«Общение» между компонентами в React может организовываться как через стандартные классы JavaScript, так и через хуки – специальные функции, которые позволяют передавать данные (состояние). Хуки существенно уменьшают количество кода при сохранении логики.
React нужен фронтендерам и фулл-стэкам. Даже если на проекте будет использоваться другая библиотека/другой фреймворк – знание React будет плюсом, потому что идеи, в него заложенные, встречаются и в других популярных технологиях для создания пользовательского интерфейса.
В каких проектах его чаще всего используют:
Стоит отметить, что эта библиотека часто используется как дополнительная технология – все дело опять же в модульности, вы можете взять от Реакта одну-единственную фичу, которая нужна вам на проекте, а весь остальной интерфейс писать на другом фреймворке или библиотеке.
Простой пример счетчика:
import React, { useState } from 'react';
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<h1>{count}</h1>
<button onClick={() => setCount(count + 1)}>Увеличить</button>
</div>
);
}
export default Counter;
Здесь мы создаем компонент Counter, который с помощью хука useState получает от родителя счетчик и метод работы с ним, после чего рендерит с помощью JSX блок div с кнопкой, к которой привязан метод работы со счетчиком. Вы можете вставить на страницу столько кнопок, сколько хотите – у каждой будет свой блок div и свой внутренний счетчик.
Если вам нужны знания по конкретному аспекту React – все можно найти в Ютубе (желательно искать источники на английском). Если же вы вообще ничего не знаете и хотите получить базу – стоит начать с официальных источников Реакта. На react.dev есть раздел «Learn», который пошагово проведет вас по всему Реакту (частично переведенный вариант можно найти здесь). Еще одну частично переведенную документацию можно найти тут, интерактивный туториал (включающий создание пары проектов с нуля без предварительных знаний) вы можете найти здесь.
Неплохой ресурс для отслеживания собственных знаний – roadmap.sh, раздел по Реакту находится тут. Есть детальный план обучения, есть квизы по React и JS. Если не работали с JavaScript раньше, то сначала посмотрите, какие шаги нужно пройти в роадмапе «JavaScript» – вам нужно пройти все до библиотек/фреймворков.
Если вы хотите получить структурированное и полное образование + обучаться с ментором – вам нужны курсы. Вот какие курсы конкретно по React можно найти на Сравни:
Курсы выше подойдут тем, кто уже умеет работать с JS на фронтенде и хочет расширить свои знания (кроме первого курса от SkyPro, он подходит всем). Если вы еще не фронтендер, вам нужны полные курсы, в которых будет рассматриваться JS, React, REST API и другие нужные вам технологии. Некоторые из курсов, которые можно найти на Сравни:
Плюсы:
Минусы Реакта – это та цена, которую приходится платить за плюсы:
Если вы хотите написать простое приложение, проще всего установить React через Node.js (точнее – через менеджер пакетов npm). Для начала почитайте детальный гайд по установке Node.js и npm от Microsoft – гайд и описывает шаги установки, и отвечает на частые вопросы. После того, как npm установлен, вам нужно написать в командной строке:
npm install react react-dom
, что локально установит вам React. После этого можно начинать писать приложения – вот в этом гайде рассказывается, что нужно делать. Больше всего вас интересует раздел про Tic-Tac-Toe, но его, к сожалению, на русский не перевели. Если вам захочется написать что-нибудь более прикладное – воспользуйтесь туториалом, ссылку на который мы уже давали выше.
Тезисно: