Почему я предпочел React Vue

Вы обратили внимание на мой слишком дипломатичный титул? Это попытка сформулировать этот разговор с точки зрения того, что я предпочитаю, а не того, что я считаю объективно лучше, в надежде отвлечь внимание от пламенной войны. Я полагаю, это не сработает.

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

Среди пользователей React часто слышна мантра: «Это просто Javascript», и это очень верно. Кажется, что во Vue много ненужного волшебства, из-за которого сложно рассуждать о компонентах. Некоторые примеры:

Шаблоны

Компонент React можно рассматривать просто как функцию, которая возвращает элементы (или, по крайней мере, класс с функцией, которая это делает). Такой функциональный подход очень естественен для разработчиков Javascript. Данные на входе, элементы на выходе. Если у вас есть массив вещей, вы можете просто сопоставить их со списком элементов. Если вы хотите исключить некоторые из этих элементов, вы можете просто использовать фильтр для массива и сопоставить результат с некоторыми элементами. Этот функциональный рабочий процесс идеально отражает ваши рассуждения о других частях вашего приложения. Этот подход дополняет сильные стороны Javascript.

Компонент Vue больше похож на шаблон, который может ссылаться на данные из структуры данных. Он содержит DSL (язык, специфичный для домена), который, хотя и незначителен, совершенно не нужен. Мне не нужен v-for, потому что у меня есть map (). Мне не нужно v-if, потому что у меня есть старый скучный обычный if. Шаблоны вводят, по крайней мере, некоторый уровень когнитивной нагрузки с ограниченной или нулевой пользой.

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

Инструменты

Поскольку React - это «просто Javascript», по моему опыту, опыт разработки намного лучше. Например, prettier-js (удивительный, самоуверенный форматировщик кода) просто работает с JSX, но борется со встроенными выражениями в шаблонах Vue, потому что шаблоны Vue - это не просто Javascript. Кроме того, поскольку шаблон и Javascript работают в разных областях, для линтера невозможно (по крайней мере, в настоящее время) обнаружить отсутствующие / неправильно написанные переменные в шаблоне. Еще одно незначительное раздражение, но совершенно ненужное.

Нарушитель сделки: изменчивое состояние

В основе React и Redux лежит неизменность. Точно так же, как функция рендеринга React является редуктором, который превращает реквизиты в элемент, изменения состояния React - это просто функции, которые сокращают старое состояние и действие в новое состояние. Однако Vue (и Vuex) имеют реактивное состояние, что означает, что вы можете изменить состояние императивным способом. Это плохо сочетается с функциональным стилем, который я использую в других частях Javascript.

Я очень привык к неизменяемым структурам данных. Они чувствуют себя в безопасности для меня, и Vuex в значительной степени заставляет вас не использовать их из-за всей магии геттеров / сеттеров, которые Vuex добавляет в магазин. В React / Redux состояние / хранилище, как вы уже догадались, «Просто объекты Javascript».

Если вам понравилась эта статья, не забудьте нажать на символ 💚 ниже, чтобы ее прочитало больше людей!

Стивен Поултон - веб-разработчик и технический архитектор, живущий в Манчестере, Англия. В свободное время он любит сочинять инди-музыку, создавать инди-игры и играть со своими инди-кошками.