Когда речь идет о веб-разработке, а именно — о разработке форм, можно встретить множество мнений о том, «на чем» лучше делать проект. Очень часто React и Angular Framework рассматриваются как альтернативы друг другу. При этом выбор фреймворка — критически важный этап, который определяет дальнейшую разработку и особенности развития технологического стека компании.
В этой статье я хочу рассмотреть плюсы и минусы каждого из подходов и предлагаю подискутировать о том, каким должен быть «идеальный» фреймворк для разработки веб-интерфейсов, который поможет повысить скорость разработки проектов, сохранить или увеличить качество кода при этом сэкономить финансы предприятия.

Привет, Хабр! Меня зовут Сергей Лапин, я — ведущий разработчик в Cloud X. И чтобы подойти к теме веб-разработки, начну немного издалека. Не смотря на широкий спектр моих увлечений в области ПО и аппаратного обеспечения, основной вектор направления моей профессиональной деятельности — это web разработка во всех возможных ее смыслах и ипостасях. И я с уверенностью могу сказать, перефразируя старую русскую пословицу: «Сколько веб не программируй, формы делать все равно придется».
Моя практика разработки форм начиналась в банках и финансовых организациях. Так уж исторически сложилось, что в подавляющем большинстве случаев в финансовом секторе клиентская часть сервисов разрабатывается с использованием популярного фреймворка Angular. Давайте разберемся почему же это так. Для этого предлагаю обратить внимание на сильные стороны Angular Framework.

Модульная архитектура, которая позволяет эффективно управлять кодовой базой и масштабировать приложение;
Двусторонняя привязка данных, позволяющая автоматически синхронизировать данные между моделью и представлением;
Реализация паттерна MVC, которая делает возможным отделение бизнес-логики приложений от UI слоя;
Широкий спектр API включающий в себя богатый набор функций, начиная от управления событиями CSS анимации, заканчивая обработкой и контролем HTTP траффика.
Но не смотря на все очевидные преимущества, у Angular есть и существенные недостатки:
Высокий порог входа. Для работы с Angular требуется глубокое изучение всех библиотек, входящих в фреймворк и высокой степени профессиональной подготовки, желательно уровня senior;
Увеличение стоимости разработки. Нехватка специалистов на рынке в совокупности с квалификационными требованиями повышают стоимость специалиста, также повышается нагрузка на HR персонал при поиске и закрытии позиций.
А что насчет React?

В прикладных сферах web-разработки сейчас безусловно доминирует библиотека React. Причины популярности этой библиотеки кроются в ее преимуществах:
Гибкость: Нет привязки к архитектуре, единственное требование – оформление UI элементов в виде отдельных компонентов;
Поддержка популярных UI систем. Ant Design, Material UI, Radix UI, Chakra UI и прочие;
Низкий порог входа. Для успешного старта достаточно уровня подготовки уровня продвинутого junior;
Сниженный уровень затрат на разработку. Благодаря невысокому порогу входа рынок насыщен специалистами, что при правильном подходе позволяет гибко управлять затратами.
С сильными сторонами определились, теперь перейдем к недостаткам (куда ж без них?):
Речь идет только про UI-слой. Библиотека решает задачи только организации графического интерфейса;
Односторонняя привязка данных. Изменения UI компонентов в React не отражается на модели;
Высокий риск издержек. Исходя из того, что React не реализует комплексных архитектурных решений, есть высокий риск ошибки с выбором исходной архитектуры приложения, что может повлечь за собой рост технического долга с неизбежными затратами на его устранение.
Как бы это странно не звучало, но реализация только UI слоя является одновременно как сильной, так слабой стороной библиотеки React. В случае с библиотекой React мы имеем полную свободу выбора, создавать ли свои собственные библиотеки UI компонентов (мы в компании пошли по этому пути) или использовать готовые компоненты с возможностью гибкой кастомизации.
Что там с кадрами?
С качественными показателями разобрались, но сегодня нельзя планировать проект без учета популярности фреймворка среди программистов и доступности специалистов. Поэтому давайте посмотрим на количественные характеристики.
React | Angular | |
Популярность (Github Stars, %) | 220 000 | 95 000 |
Количество открытых вакансий (по данным hh.ru) | 120 000 | 50 000 |
Зарплата (Россия/СНГ, Senior) | 350 000 | 380 000 |
Насыщенность рынка (% на 1000 соискателей) | 75 | 25 |
Данные из открытых источников, цифры актуальны на конец 2025 года.
Чтобы сравнить показатели, лучше всего нормализовать значения в пределах 100% и построить диаграмму. Что же, если прагматично рассматривать ситуацию, React выигрывает по всем показателям.

Проект мечты
А теперь давайте пофантазируем и попробуем собрать себе «проект мечты», который обеспечит максимальное качество результата с минимальными затратами. Что же возьму себе я?! От React, в первую очередь, я возьму гибкость, поддержку популярных UI систем, сниженный уровень затрат на разработку и низкий порог входа, а от Angular я бы хотел взять реализацию паттерна MVC, модульную архитектуру и конечно же широкий спектр API с двухсторонней привязкой данных.
Очень хорошо, когда наши желания совпадают с нашими возможностями, но это случается крайне редко. Но, как это часто бывает, в нашем вопросе можно вполне небольшими усилиями «дотянуть» реальность до нужного уровня.
Библиотека | Ожидания | Реальность (реализация) |
React | Гибкость | Выбрать готовый или разработать свою UI систему |
поддержку популярных UI систем | ||
Низкий порог входа | Оставить как есть | |
Сниженный уровень затрат на разработку | ||
Angular | Реализация паттерна MVC | Успешно заменяется на MVVM |
Широкий спектр API и двусторонняя привязка данных | ||
Модульная архитектура | Реализуется следованием правилам структурирования React компонентов, заложенных разработчиками в совокупности с общими правилами организации MobX сторов. |
Таблица желаний и возможностей
Как показывает таблица, все желания выполняются практически стандартными средствами, но вы же успели заметить, что одна ячейка осталась пустая. Дело в том, что за реактивность модели данных в Angular отвечает библиотека RxJS. Но так исторически сложилось, что в React проектах за реактивность отвечает библиотека MobX. И связка React+MobX хорошо себя зарекомендовала, и две эти библиотеки уже много лет идут рука об руку и почти стали синонимами.
Вот об этом недостающем куске паззла, без которого наша идеальная картина мира имеет мало шансов сложиться, и пойдет речь в следующей статье. Я расскажу о том, как была создана библиотека, которая средствами MobX реализует структуру хранения данных, методы манипуляций данными и точки отслеживания изменений. И все это для того, чтобы удачными архитектурными решениями, заложенными в конкурирующий фреймворке, можно воспользоваться в любом React-проекте без существенных доработок.
