React - конечно самый качок
React - конечно самый качок

Введение

В мире фронтенд-разработки существует множество различных фреймворков, которые помогают сделать процесс создания веб-приложений более удобным и эффективным. Я являюсь частью этого мира уже более 4-х лет, сейчас занимаю должность фронтенд разработчика в топ-1 компании по разработке корпоративного софта, Loyalty Labs. За все время в IT я познакомилась с разными инструментами и фреймворками, и хотела бы обсудить трёх "гигантов" в области frontend: React, Angular и Vue.

Эта статья не предназначена для того, чтобы обучать вас этим фреймворкам. Это не технический гайд. Здесь я поделюсь своим мнением, попытаюсь разобраться в особенностях и понять, чем каждый из этих "гигантов" может гордиться.

Личный опыт

Когда я была начинающим разработчиком, мне было сложно определиться с тем, что изучать. Я знала, что мне предстоит освоить стандартный набор инструментов: HTML, CSS и JavaScript. Ну а что ещё нужно фронтенд-разработчику на первый взгляд? Погружаясь в мир фронтенд-разработки, я узнала о существовании JavaScript-фреймворков, которые упрощают создание приложений. Прочитав множество статей о самых популярных, я всё никак не могла понять, чем один лучше другого, почему разработчики изучают эти фреймворки на уровне нового языка.

На моём обучающем курсе нам рассказывали о Vue, он и стал моим первым фреймворком для первого SPA. Понять почему преподаватели выбрали именно его мне тогда не удалось, ведь я также слышала о популярности других инструментов - Angular и React. На сегодняшний день эти три фреймворка остаются наиболее популярными среди разработчиков и востребованными среди работодателей.

Цель статьи

В этой статье я хочу помочь тем, кто только начинает погружение в мир фронтенд-разработки и задумывается о том, какой фреймворк выбрать. Я постараюсь выделить ключевые особенности и сильные стороны каждого из этих трёх "гигантов", чтобы показать, чем они могут быть полезны и привлекательны для разработчиков.

Особенности и преимущества React

Компонентный подход

React использует компонентный подход к разработке, что позволяет создавать многократно используемые и легко управляемые части интерфейса, это кстати моя любимая часть, каждый компонент может содержать в себе логику, стили и разметку, что делает код более модульным и легко поддерживаемым.

Виртуальный DOM

Одна из ключевых особенностей React — использование виртуального DOM. Это улучшает производительность приложения за счёт того, что изменения применяются сначала в виртуальном DOM, а затем только дифференцированные изменения обновляются в реальном DOM. Это позволяет избежать избыточных операций и значительно ускоряет рендеринг, что важно для любого интерфейса, кому понравится ждать пока всё его DOM дерево обновится ради апдейта какого-то одного списка?!

JSX

React использует JSX, синтаксис, который позволяет писать HTML-подобный код внутри JavaScript. Это упрощает создание интерфейсов, так как компоненты становятся более читаемыми и декларативными. Лично я считаю эту фишку очень удобной для начинающих разработчиков, ты видишь привычный HTML, но при этом можешь использовать всю мощь JavaScript. Это помогает быстрее освоиться в разработке компонентов и логики интерфейса, так как переход от написания статических страниц к динамическим приложениям становится плавным и интуитивно понятным.

React Hooks

Hooks — также одна из самых мощных и интересных возможностей React. Они позволяют использовать состояние и другие функции React в функциональных компонентах без необходимости писать классы. Вот несколько полезных хуков:

  • useState: позволяет добавлять состояние в функциональные компоненты.

  • useEffect: управляет побочными эффектами, такими как загрузка данных, подписка на обновления или изменения DOM.

  • useContext: позволяет использовать контекст в компонентах без необходимости встраивать его в props.

  • useReducer: управляет более сложным состоянием, чем useState, и является альтернативой для Redux.

Сообщество и экосистема

React обладает огромной экосистемой и активным сообществом. Это значит, что вы всегда сможете найти библиотеки и инструменты для решения практически любой задачи. Например:

  • React Router: для маршрутизации.

  • Redux: для управления состоянием приложения.

  • Next.js: для серверного рендеринга и статической генерации сайтов.

Отличная документация и обучение

React предлагает обширную документацию и множество обучающих материалов. Это делает его доступным для новичков и позволяет быстро освоить основные концепции и начать разработку.

Особенности и преимущества Vue

Прогрессивный фреймворк

Vue разработан как прогрессивный фреймворк, что означает, что его можно внедрять в проект постепенно. Можно начать с использования Vue для создания отдельных компонентов на уже существующих страницах и постепенно расширять его применение до полноценного SPA (Single Page Application).

Простота и интуитивность

Одной из ключевых особенностей Vue является его простота и интуитивность. Начать работу с Vue можно без глубокого погружения в сложные концепции. Синтаксис Vue напоминает привычный HTML, что облегчает процесс обучения для новичков.

Декларативные шаблоны

Vue использует декларативный синтаксис шаблонов, что делает код более читаемым и понятным. В шаблонах Vue можно легко связывать данные с элементами интерфейса, используя директивы, такие как v-bind и v-model.

Реактивность

Vue обеспечивает мощную систему реактивности, которая автоматически отслеживает изменения данных и обновляет пользовательский интерфейс. Это упрощает управление состоянием и минимизирует необходимость в написании лишнего кода для обработки изменений.

Компонентный подход

Как и в React, в Vue используется компонентный подход. Компоненты Vue инкапсулируют логику, стили и шаблоны, что способствует модульности и переиспользованию кода.

Экосистема

Экосистема Vue также включает в себя множество библиотек и инструментов, таких как:

  • Vue Router: для маршрутизации.

  • Pinia: для управления состоянием приложения.

  • Nuxt.js: для серверного рендеринга и статической генерации сайтов.

Отличная документация и сообщество

Vue известен своей отличной документацией, которая включает подробные примеры и гайды. Активное сообщество Vue предоставляет множество ресурсов, таких как форумы, блоги и учебные материалы, но стоит отметить, что комьюнити Vue сильно меньше, чем у его "коллег" по этой статье.

Поддержка TypeScript

Одно из сильных "да" для меня у Vue, это встроенная поддержка TypeScript. Это особенно полезно для крупных проектов и командной разработки.

Особенности и преимущества Angular

Полноценный фреймворк

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

TypeScript

Angular написан на TypeScript. Одного этого предложения должно быть достаточно, чтобы внушить читателю чувство защищенности. TypeScript помогает выявлять ошибки на этапе компиляции, что способствует более надежной и предсказуемой разработке.

Модульность

Angular организует код в модули, что упрощает его структуру и поддерживаемость. Модули позволяют группировать связанные компоненты, директивы, сервисы и другие элементы, что делает код более организованным и понятным. Как бухгалтер, всё по папочкам.

Двухстороннее связывание данных

Одной из ключевых особенностей Angular является двухстороннее связывание данных. Это означает, что изменения в модели данных автоматически отражаются в пользовательском интерфейсе и наоборот. Это упрощает синхронизацию данных и минимизирует количество кода, необходимого для управления состоянием.

Dependency Injection (DI)

Angular активно использует концепцию Dependency Injection, что способствует лучшей организации кода и его тестируемости. DI позволяет легко управлять зависимостями компонентов и сервисов, делая код более гибким и модульным.

Angular CLI

Angular CLI — это инструмент командной строки, который упрощает создание, управление и развертывание проектов на Angular. С его помощью можно быстро создать новый проект, добавить компоненты и сервисы, а также настроить различные конфигурации и сборку.

RxJS и реактивное программирование

Angular интегрирован с библиотекой RxJS, что позволяет использовать реактивное программирование для обработки асинхронных данных. Это делает код более гибким, особенно при работе с потоками данных и событиями.

Шаблоны и директивы

Angular использует декларативный синтаксис шаблонов, что делает создание пользовательских интерфейсов более удобным и понятным. Директивы позволяют расширять возможности HTML, добавляя новую функциональность и поведение к элементам.

Встроенное тестирование

Angular включает в себя встроенные инструменты для тестирования, такие как Karma и Jasmine. Это облегчает написание и выполнение тестов.

Большое сообщество и поддержка

Angular имеет активное сообщество и официальную поддержку от Google. Это означает, что разработчики могут рассчитывать на регулярные обновления, исправления ошибок и новую функциональность. Кроме того, существует множество ресурсов для обучения, включая документацию, курсы и форумы.

Заключение

В последние три года я активно работаю с React, и, несмотря на свою гибкость и популярность, он является лишь одним из нескольких инструментов в арсенале фронтенд-разработчика. Vue был моим первым фреймворком, его простота и интуитивный подход помогли мне быстро освоить основы, а переход на React после работы с Vue не был слишком сложным.

На самом деле, я никогда не зацикливалась на каком-то одном фреймворке, следуя правилу "За что платят, на том и напишу". Тем не менее, так сложилось, что большинство проектов, над которыми я работала, были написаны на React. Со временем я углубилась в его возможности, превратившись из фронтенд-разработчика в специализированного React-разработчика.

Таким образом, каждому фреймворку есть чем гордиться и что предложить разработчикам. Выбор того или иного инструмента зависит от конкретных задач проекта, ваших личных предпочтений и требований работодателя. Надеюсь, эта статья помогла вам лучше понять особенности и преимущества React, Vue и Angular, и сделать осознанный выбор на пути к вашему профессиональному развитию.

Если у вас есть вопросы по теме статьи или просто хотите обменяться мнениями, не стесняйтесь писать мне в LinkedIn.
Также у нас регулярно появляются вакансии на фронт и бэк, следить за ними и нашей корпоративной культурой можно через наш тг-канал: https://t.me/Loylabs

Комментарии (39)


  1. Revertis
    26.07.2024 12:03

    А есть не тормозные фреймворки вообще?


    1. Troonsply Автор
      26.07.2024 12:03

      А тормозные это какие?


      1. Revertis
        26.07.2024 12:03

        Наверное все, которые сейчас в ходу.


        1. 0x6b73ca
          26.07.2024 12:03

          Обоснуйте пожалуйста


          1. zoto_ff
            26.07.2024 12:03

            ну, можете взглянуть на бенчмарк: krausest.github.io/js-framework-benchmark


        1. Reallamos
          26.07.2024 12:03
          +2

          Главное ляпнуть?


    1. artptr86
      26.07.2024 12:03
      +1

      да тот же SolidJS: сильно меньше, чем React и шустрее за счёт более правильной модели реактивности


    1. Bigata
      26.07.2024 12:03

      Ооо, это единственный стоящий комментарий.

      P.S. почему их кличут фреймворками? Всё-таки это библиотеки больше напоминают


      1. artptr86
        26.07.2024 12:03
        +2

        Angular — вполне себе фреймворк


  1. Beholder
    26.07.2024 12:03
    +1

    Vue CLI — это очень сильный инструмент, который упрощает создание и настройку проектов на Vue

    Больше не поддерживается и не рекомендуется. Предлагается использовать create-vue.

    Vuex: для управления состоянием приложения

    Аналогично, давно уже предлагается использовать Pinia.


    1. danilovmy
      26.07.2024 12:03

      Не соглашусь про pinia. Она не рекомендовалась а просто была единственным storage для vue3, но потом вышел Vuex4 для vue3 и опять стало опять все хорошо и его можно снова использовать в проектах.


      1. Beholder
        26.07.2024 12:03
        +4

        Хорошо для тех, кто не может избавиться от старых привычек или legacy кода?

        Pinia is now the new default. The official state management library for Vue has changed to Pinia. Pinia has almost the exact same or enhanced API as Vuex 5, described in Vuex 5 RFC. You could simply consider Pinia as Vuex 5 with a different name.


    1. Troonsply Автор
      26.07.2024 12:03
      +1

      Большое спасибо за вашу информацию! Действительно, Vue CLI и Vuex постепенно уступают место новым инструментам, и для новых проектов теперь рекомендуется использовать create-vue для создания каркасов проектов на базе Vite. Однако, я бы не была так категорична насчёт "не поддерживаются". Я видела проекты, которые до сих пор используют Vuex и Vue CLI. Пару месяцев назад, кстати, здесь же читала статью о миграции с Vue CLI и Webpack на Vite.


    1. Troonsply Автор
      26.07.2024 12:03

      создатель Vue, однажды сказал: «Pinia — это фактически Vuex 5! На данный момент это действительно вопрос названия/брендинга».


  1. cakkypamucm
    26.07.2024 12:03

    Двустороннее связывание данных не только в angular, еще и во vue.
    Хуки есть не только в react, а еще и во vue ака composables (примеры)
    Очень сильный инструмент Vue CLI is now in maintenance mode, про vuex тоже уже сказали.
    Вы делитесь мнением про времена vue v2)


    1. Troonsply Автор
      26.07.2024 12:03

      Я думаю, что именно наличие хуков и в react, и во vue сделало мой переход с одного фрейма на другой легким, в реакте они чуть позже же появились и я пришла на готовенькое)) Я здесь не стремилась описать все особенности фреймов, но я рада, что вы делитесь этим в комментах, это полезная инфа.


      1. hello_my_name_is_dany
        26.07.2024 12:03
        +2

        Во-первых, хуки появились раньше в react, во-вторых, хуки во vue вообще не то же самое, что в react, потому что во vue это не хуки, а просто реактивный API, который буквально нужен для создания state и который можно использовать даже вне компонента. А в react хуки подвязываются к контексту для связки с нодой в VDOM, что и создаёт "магию" для того же state, и по сути являются костылями из-за отказа от классовых компонентов


        1. Troonsply Автор
          26.07.2024 12:03

          Вы правы, хуки в React и Composition API в Vue 3 появились с разницей в полтора года или даже больше. Я, вероятно, перепутала их с другими концепциями, возможно, с миксинами. Благодарю за уточнение, это помогло лучше разобраться в различиях!


  1. Mantis-religiosa
    26.07.2024 12:03
    +1

    Typescript же все три поддерживают, реактивность тоже у всех есть. И компонентность. Так в чем обзор плюсов и минусов? Я не увидел выделенных отличий


    1. artptr86
      26.07.2024 12:03

      Во Vue и Angular тайпскрипт не может проверять типы внутри шаблонов.


      1. flancer
        26.07.2024 12:03

        А если использовать JSDoc, то тоже нет возможности проверять?


        1. artptr86
          26.07.2024 12:03

          Я не уверен, что есть такой чекер для шаблонов


      1. lehkap
        26.07.2024 12:03
        +1

        Если ангуляр собирать под AOT, то вроде как проверяет


  1. onets
    26.07.2024 12:03
    +5

    От таких статей я всегда жду, что кто-то реализует проект сначала на одном фреймворке, потом на другом и наглядно покажет разницу в удобстве, интуитивности, производительности, скорости разработки, поддерживаемости, комьюнити и счетчику косяков на конкретных примерах.

    Но нет, всегда обламываюсь.


    1. softshape
      26.07.2024 12:03

      На рабочих проектах так делать никто не будет (потому что половина времени уйдет впустую). На студенческих... ну попробуйте сами :)


    1. VirtualVoid
      26.07.2024 12:03

      Зато вы непременно прямо, либо косвенно, узнаете об очередном факте устаревания какого-либо инструмента или библиотеки ;)


  1. zoto_ff
    26.07.2024 12:03

    из троих Vue единственный адекватный. а так, как упомянули выше, SolidJS сейчас является самым лучшим и по удобству и по производительности. скоро должен Svelte v5 выйти – тоже круто, но больше для тех, кому Vue нравится


  1. fray2000
    26.07.2024 12:03

    Либо сгенерировано, либо копипаста какая-то старая. По факту: самый лучший фреймворк - VUE, это даже не обсуждается. Но использовать его в разработке не стоит, потому что с переходом на 3 версию половина экосистемы погибло, а ещё половина от половины - китайское. Angular - самый худший. Из за rxjs, observables и модулей (а также сервисов и ещё много чего). Он пытается превратится во VUE с каждой новой версией (раз в полгода), но пока что получается так себе. Поэтому нравится/не нравится (мне не нравится) кроме React ничего не остается. Всякие Solid, Svelte и т.д. серьезно рассматривать смысла нет, если только не мазохисты, любите костыли и велосипеды и не любите ии-помощников.


    1. Troonsply Автор
      26.07.2024 12:03

      Вы меня раскусили, это сгенерированная старая копипаста. Что вы имеете в виду под «погибло» половина экосистемы Vue? И почему вы всё еще считаете его лучшим? Судя по вашему комментарию, лучший React?


      1. fray2000
        26.07.2024 12:03

        Ну вот вы сейчас это и доказали. Как можно писать статью про фреймворки без понимания того, что в них происходит? У 2ой и 3ей версии VUE совершенно разные API, и когда вышла трёшка - все создатели библиотек, плагинов и пр (в том числе самых популярных) не кинулись скопом переписывать все это дело, ибо изменения радикальные, работы много. Соотв все это дело и кануло в лету. Найти что то готовое/актуальное за пределами vuetify не так просто, а чаще невозможно. Писать на нем можно, но зачем? Если есть реакт где все тоже самое, но нет таких проблем


    1. artptr86
      26.07.2024 12:03

      А что такого нужно от экосистемы Vue, чтобы, по-вашему, можно было начинать его использовать в разработке?

      Кстати, "ии-помощники" нормально понимают SolidJS, не надо на них наговаривать.


  1. AlphaCentauri9
    26.07.2024 12:03

    Как по мне, Angular подходит больше людям с уже хотя бы минимальным опытом в программировании. Например при переходе с бекенда, как было у меня, структура и системность больше ощущаются чтоли. Также я писал в своё время часть диплома на Vue и он показался попроще в освоении, как для неопытного фронтенд разработчика. В React слишком глубоко не лез, только подправлял существующий код и вникал в Redux паттерн для работы с подобным подходом в Angular.

    Angular крут тем, что позволяет писать декларативный и реально реактивный код, его разработчики очень стараются работать в этом направлении. Особенно это видно по последним двум версиям (17-18), где они ввели сигналы (signals) и пытаются отвязаться от zone.js в своем механизме change detection. Теперь со связкой signals + rxJs (observables, subjects) можно писать минимум императивного кода. Кому не нравятся модули - делайте standalone компоненты, разработчики ввели и такую фичу, всё для народа.

    Основной проблемой фреймворка раньше всегда слышал его возможную медленность при написании громоздких страниц. Такое случается у менее опытных разработчиков, которые ещё не вникали в принципы работы механизма, который обеспечивает фреймворку его реактивность - change detection'а. Если достаточно хорошо понять как это работает, использовать разные его стратегии в компонентах, пользоваться пайпами вместо обычных вызовов методов из шаблона страницы - всё будет ок даже при огромных страницах с множествами сложных форм. Да и разработчики, как было сказано ранее, стараются улучшать эту часть нашей жизни.


    1. artptr86
      26.07.2024 12:03
      +1

      Angular крут тем, что позволяет писать декларативный и реально реактивный код

      Но ведь и Vue позволяет писать декларативный и реально реактивный код. Притом изначально не требовал для этого костылей в виде RxJS, ZoneJS и прочего.


      1. AlphaCentauri9
        26.07.2024 12:03

        Да, Vue тоже крут, пусть я и не разбирался во всех его аспектах в то время как писал немного на нём, а после не особо следил за прогрессом языка. Мне кажется для любого человека достаточным для выбора фреймворка будет написать одно и то же приложение по типу прокаченной тудухи с каким-то минимальным стейт менеджментом. Человек почувствует разницу между ними и свою личную приязнь/удобство к какому-либо из них. А если вообще ничего не нравится, то зачем таким заниматься :)


  1. PML
    26.07.2024 12:03

    С каких пор Vue и React стали фреймворками? Тогда в кучу им jQuery приписали бы.

    Статья о девочке, как она познала Vue и React, на Angular сил не хватило? Ибо в Vue и React порог входа проще, так и надо было написать, входить во фронт нужно с этих двух библиотек.

    Хотя бы примеры какие накидали к статье. На вид статья наляпаная на GPT.