Почему React угрожает будущему веб-компонентов

Когда я впервые прочитал о Google Polymer, я увлекся им. Я «опытный» программист Vaadin, и хотя я не увлекаюсь интерфейсным программированием, я могу терпеть компонентно-ориентированную разработку.

Это то, чего я ожидаю от веб-компонентов в целом и от Polymer в частности: предоставить мне готовые компоненты, которые могут улучшить мой опыт разработки интерфейсов. Polymer обещал мне лучшее будущее, он обещал мне, что все, что мне нужно сделать, «для этого есть компонент».

А потом приходит React от Facebook...

Должен признаться, когда я впервые посмотрел на код React, я подумал, что Facebook просто сошел с ума. HTML в середине javascript казался очень большой смесью проблем. Только когда для Android был запущен React Native, я почувствовал себя обязанным попробовать его. Неудобный синтаксис javascript для победы над (почти) кроссплатформенным кодом казался хорошим компромиссом. К концу моего первого приложения для чата я почувствовал, что, возможно, реакция была мощной: синтаксис мощный и лаконичный. Из-за этого компоненты Polymer выглядят громоздкими.

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

Вы говорите картошка, я говорю картошка

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

Поскольку оба фреймворка пересекаются и в основном могут охватывать одни и те же требования, при разработке приложения вам может понадобиться выбрать один из них. Согласно Опросу Stack Overflow за 2016 год, React занял 7-е место в рейтинге самых любимых технологий, а Polymer даже не упоминается в рейтингах. Это означает, что большинство людей, вероятно, предпочтут React, а не Polymer.

Почему нас должно волновать, кто «победит»

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

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

Сквозные компоненты (например, поле автозаполнения, поле выбора и т. д.) должны разрабатываться с использованием сквозных технологий, таких как Polymer, что позволяет большему количеству людей использовать их независимо от их технологических предпочтений (React, Angular, Vanilla HTML), таким образом, каждый в сообществе разработчиков программного обеспечения выигрывает.

Что угрожает будущему

Судя по звездам Github, сообщество React примерно в 3 раза больше, чем у Polymer (57 тыс. против 17 тыс.).

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

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

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

Мое желание на будущее

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

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

К сожалению, будущее не кажется светлым.