React — это библиотека JavaScript, которую я использую в последнее время, и она мне нравится по нескольким причинам. Одна из причин в том, что это быстро. Структура компонентов вместе с синтаксисом JSX облегчают понимание. А виртуальный DOM позволяет быстро и эффективно отображать и изменять элементы страницы. Мне также нравится, как состояние компонента, методы жизненного цикла и реквизиты можно использовать в координации друг с другом, чтобы сгладить взаимодействие с серверной частью. Условный рендеринг на основе данных, возвращаемых с сервера, упрощается по сравнению с написанием ванильного JavaScript. Что-то может отображаться для пользователя, пока в фоновом режиме выполняются асинхронные сетевые запросы. Затем, когда данные наконец получены, соответствующие компоненты могут быть обновлены. Это делает реализацию таких функций, как авторизация на стороне клиента, загрузочные экраны или даже бесконечная прокрутка, более доступной. Это также делает отправку форм очень простой, поскольку содержимое формы может храниться в состоянии как один объект JavaScript.

React также имеет множество недостатков, которые начинают проявляться по мере роста приложения. Если я хочу создавать маршруты, мне нужен отдельный пакет, например react-router. Если передача реквизита через дерево компонентов становится неуправляемой, мне нужен отдельный пакет, например react-redux. Еще одна вещь, которая может затруднить использование React, заключается в том, что использование виртуального DOM означает, что следует избегать включения пользовательского кода JavaScript или даже популярных библиотек, таких как jQuery, потому что фактический DOM больше не является источником правды для того, что визуализируется. Иногда это означает необходимость поиска в Интернете другой совместимой библиотеки.

Еще один фреймворк, который я часто использовал, — AngularJS. Чтобы было ясно, мой опыт связан с оригинальной версией до переписывания в сентябре 2016 года, так что, возможно, что-то изменилось. Но в AngularJS есть что понравиться. Это действительно больше фреймворк, чем библиотека. Он следует шаблону MVC и поставляется с функциями маршрутизации. После настройки файловой структуры я могу просто написать все свои представления в обычном HTML, поменять их местами в зависимости от маршрута и написать логику контроллера для каждого представления отдельно. Это означало, что я могу использовать jQuery и пользовательский JavaScript столько, сколько захочу, и я могу быстро отображать новые страницы без перезагрузки.

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

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