React - самая популярная интерфейсная библиотека за последние несколько лет.

Vue - это интерфейсный фреймворк, который в последние несколько лет по популярности догоняет React.

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

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

Создание приложения

В React есть программа командной строки Create React App, которая позволяет нам создавать каркас приложения с помощью JavaScript или TypeScript.

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

Приложение Create React может запускать тесты, которые находятся в папке __tests__.

Vue имеет Vue CLI для создания приложения с помощью JavaScript или TypeScript, плюс мы можем включить CSS, SASS, Less и т. Д. Для стилизации. Мы также можем добавить инфраструктуру тестирования прямо в наш каркас, изменив параметры, отображаемые в интерфейсе командной строки Vue.

Мы также можем добавить Vue Router и Vuex из Vue CLI.

Он также поддерживает создание прогрессивных веб-приложений.

Vue CLI имеет графический интерфейс для быстрого создания проектов прототипов приложений.

Помимо использования программ CLI, мы можем использовать тег скрипта для добавления React и Vue в наше приложение.

Однако большинство библиотек React доступны только в виде пакетов NPM. В то время как многие библиотеки Vue можно добавить через тег скрипта.

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

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

Синтаксис шаблона

Большинство приложений React используют JSX для отображения данных на экране. Это ярлык для вызова метода React.createElement.

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

Например, мы можем написать следующее, чтобы отображать значение переменной в приложении React:

import React, { useState } from "react";
export default function App() {
  const [foo] = useState("foo");
  return <div className="App">{foo}</div>;
}

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

index.html :

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>App</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      {{foo}}
    </div>
    <script src="index.js"></script>
  </body>
</html>

index.js :

const app = new Vue({
  el: "#app",
  data: {
    foo: "foo"
  }
});

В приведенном выше коде мы отображаем значение свойства foo в data в шаблоне, написав:

{{foo}}

Способ React немного проще в том, что мы помещаем все в одну и ту же компонентную функцию.

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

В обоих случаях нам нужно изучить новый синтаксис.

Условно отображать данные

В приложениях React мы отображаем элементы условно с помощью обычных операторов if или switch в методе рендеринга компонентов класса или возвращаем JSX в функциональных компонентах.

Логика их включения и выключения находится в самом файле компонента.

Например, мы можем написать следующее, чтобы включать и выключать что-то в приложении React:

import React, { useState } from "react";
export default function App() {
  const [show, setShow] = useState();
  const toggleShow = () => {
    setShow(!show);
  };
  return (
    <div className="App">
      <button onClick={toggleShow}>Toggle</button>
      {show && <div>foo</div>}
    </div>
  );
}

В приведенном выше коде мы добавили кнопку переключения, а затем состояние show с функцией setShow переключает состояние show между true и false.

Затем мы показываем div условно с помощью:

{show && <div>foo</div>}

В Vue мы отображаем элементы в шаблоне и используем v-if для управления им.

Например, для этого мы можем написать следующий код:

index.html :

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>App</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <div id="app">
      <button @click="toggle">Toggle</button>
      <div v-if="show">foo</div>
    </div>
    <script src="index.js"></script>
  </body>
</html>

index.js :

const app = new Vue({
  el: "#app",
  data: {
    show: false
  },
  methods: {
    toggle() {
      this.show = !this.show;
    }
  }
});

В приведенном выше коде мы заставили метод toggle включать и выключать this.show.

Затем мы добавили кнопку Toggle для вызова toggle и условного отображения с помощью директивы v-if.

Как мы видим, реализация React проще, чем реализация Vue.

Мы также должны понимать части компонента Vue, например, когда вызываются методы компонентов и где хранятся состояния.

С ловушкой useState React это становится более очевидным. Нам также не нужно что-то добавлять в шаблоны и компоненты, чтобы что-то добавить.

Мы можем добавить все в один файл с компонентами React. Это удобнее для простых компонентов.

Однако подход Vue более удобен для отделения логики от кода отображения.

Это более чистый подход к организации компонента, когда вещи более сложные.

Вердикт

Vue - это скорее полноценный фреймворк, в отличие от React, который больше похож на библиотеку.

Vue CLI имеет гораздо больше возможностей для создания приложения с параметрами, необходимыми для создания приложения.

В приложении Create React есть только варианты для создания базового приложения, в котором нет маршрутизации или какого-либо решения для управления состоянием.

Это не идеально, поскольку большинство людей предпочитают одностраничное приложение, а не улучшать устаревшее приложение.

Кроме того, библиотеки Vue доступны в виде тегов сценариев, тогда как большинство библиотек React доступны только в виде пакетов Node.

Vue - явный победитель с Vue CLI с его опциями.

Отображение данных похоже как на React, так и на Vue. Они оба требуют некоторой логики и отображают элементы, а также условно отображают элементы на экране.

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

Vue лучше подходит для сложной логики отображения, а React лучше для простой логики.