В наши дни веб-компоненты - это естественный способ создания пользовательских интерфейсов в Интернете. Три самых популярных фреймворка (Angular, React и Vue.js) используют его как архитектурный элемент. Знаете ли вы, что мы можем использовать этот шаблон, используя только API веб-платформы, и в результате мы можем повторно использовать его во всех наших проектах Frontend? Эта статья покажет вам, как создать свой первый нативный веб-компонент и как использовать его с Angular, React и Vue.
Что такое веб-компоненты?
Веб-компоненты на высоком уровне представляют собой изолированные части (разновидности блоков) для пользовательского интерфейса (UI), которые могут взаимодействовать с другими элементами через свойства и события (входы и выходы из этих блоков). Возьмем, к примеру, элемент ‹video›. Мы можем использовать этот элемент с любыми технологиями браузера, и мы можем передавать такие свойства, как ширина и высота, и прослушивать события, такие как onclick. Говоря более строго, мы можем сказать, что веб-компоненты представляют собой набор API веб-платформы, которые позволяют нам создавать HTML-теги, которые будут работать в современных веб-браузерах и могут использоваться с любой технологией JavaScript (React, Angular, Vue.js и т. Д.) .).
У веб-компонентов четыре основных спецификации:
Зачем использовать веб-компоненты?
Зачем использовать веб-компоненты В настоящее время все фронтенд-разработчики сталкиваются с двумя большими проблемами, и это может стать источником энергии, времени и денег для компаний. Эти:
Устаревшие
Наследие - хорошо известная проблема в разработке программного обеспечения. Наследие означает старую кодовую базу, которую нам нужно обновить для взаимодействия с современными проектами и инструментами JavaScript.
Отток фреймворка
Экосистема инструментов и фреймворков JavaScript быстро меняется. Выбор правильной структуры для нашего нового проекта обычно вызывает стресс и утомляет, потому что мы не можем предположить, сколько времени она будет актуальной. Мы будем рассчитывать на поддержку всего сообщества и инструментов, стоящих за этой актуальностью; тогда отток Framework означает проблему актуальности и того, как повлияет на наши инвестиции в обучение и разработку набора инструментов, которые могут быстро превратиться в устаревшую кодовую базу. Помните, что веб-компоненты - это набор спецификаций веб-платформы. Мы используем то, что, вероятно, надолго будет использоваться в веб-браузерах и дает нам следующие преимущества:
- Веб-компоненты могут использоваться повторно и работают между фреймворками.
- Веб-компоненты могут работать во всех основных веб-браузерах.
- Веб-компоненты легко обслуживаются и подготовлены к будущему, главным образом потому, что они основаны на спецификациях веб-платформы.
Как создать веб-компонент?
Чтобы узнать о веб-компонентах, мы создадим компонент, который упрощает отображение сообщений об ошибках / предупреждениях. Этот компонент будет называться error-component и получит сообщение в содержимом и тип ошибки в качестве атрибута.
Сначала мы собираемся создать файл index.html и добавить базовую структуру HTML.
Теперь мы создадим класс ErrorComponent, который расширяется от HTMLElement, используя объект customElements, и мы собираемся определить элемент ‹error-component›.
Благодаря этому веб-браузер знает, что существует новый элемент и что класс ErrorComponent описывает его поведение. Затем мы можем использовать этот новый элемент в нашем HTML.
Теперь в нашем конструкторе () мы добавим Shadow DOM с помощью this.attachShadow (), и мы собираемся добавить шаблоны элементов и контейнер к нашему компоненту. Кроме того, мы используем статический метод template () для получения разметки и стилей. Если вы помните, наш компонент получает атрибут 'kind', который может быть 'error' или 'warning', мы получаем это значение с помощью this.getAttribute () и используем его для активации HTML-шаблона, который мы хотим показать, используя a this.templates.querySelector () и метод template.content.cloneNode (true).
‹Template› позволяет нам определять заполнители, которые мы не будем обрабатывать, пока не активируем его. Затем мы собираемся определить здесь метод template (); мы определяем три ‹template› с их стилями и элементом ‹slot›. Этот элемент является заполнителем, который будет показывать содержимое, которое мы отправляем между содержимым ‹error-component› ‹/error-component›.
Если мы откроем файл index.html, мы увидим наши сообщения разного цвета, в зависимости от того, сообщение об ошибке или предупреждение.
Как опубликовать веб-компонент?
‹Error-component› работает, но что, если я захочу использовать этот веб-компонент в другом проекте JS? Что ж, для этого нам нужно приложить дополнительные усилия, чтобы опубликовать компонент как пакет npm, и таким образом, когда я захочу повторно использовать компонент, просто запустите
$ npm установить компонент простой ошибки
Звучит здорово, правда?
Хорошо, тогда сначала нам нужно лучше организовать наш код. В корне моего проекта я создам папки src / и example / и создам файл package.json и следующее описание.
И после этого собираюсь запустить:
$ npm install
На этом шаге будут установлены все зависимости, необходимые для распространения нашего компонента.
В папке src / я создам файл index.js и добавлю следующий код.
При этом я использую модули ES, чтобы сделать наш компонент модульным. И если вы видите в index.js, мы используем './error-component', что означает, что нам нужно создать файл src / error-component.js, и туда мы собираемся добавить код для нашего компонента. .
В примере папки / мы создадим файл index.html и добавим следующее:
В этом файле мы собираемся тестировать наш код каждый раз, когда вносим какие-то изменения и запускаем команду:
$ npm запускать
Мы собираемся загрузить этот файл, полифил веб-компонентов, чтобы он работал в старых веб-браузерах, и наш пакет кода компонентов, который находится в ./dist/index.js
Теперь мы собираемся создать файл webpack.config.js
При этом мы используем webpack для создания пакета в папке dist /.
Хорошо, теперь нам нужно запустить:
$ npm запустить сборку
и опубликуйте наш пакет с помощью:
$ npm опубликовать
И мы опубликовали этот пакет на npmjs.org
и мы можем добавить этот компонент в наш проект с помощью:
$ npm i компонент простой ошибки
Затем я собираюсь повторно использовать этот компонент в приложении с Angular, React и Vuejs.
Угловой
В Angular я создал новое приложение Angular с Angular CLI.
$ ng новое приложение angular
Установите мой веб-компонент с помощью:
$ npm i компонент простой ошибки
И добавляем компонент в app.module.ts.
и CUSTOM_ELEMENTS_SCHEMA в app.module.ts. Таким образом, Angular поймет, что мы используем собственные веб-компоненты.
Теперь я могу использовать свой компонент в приложении Angular, как вы видите в коде:
Затем я могу увидеть результат:
$ нг подавать
Реагировать
В reactjs я создал новое приложение с помощью Create App.
$ создать-реагировать-приложение реагировать-приложение
Установите мой веб-компонент с помощью:
$ npm i компонент простой ошибки
И добавляю свой компонент в App.js
Затем я могу увидеть результат:
$ npm запускать
Vue
В Vuejs я создал новое приложение, используя Vue CLI.
$ vue создать vue-приложение
Установите мой веб-компонент с помощью:
$ npm i компонент простой ошибки
И добавляем мой компонент в src / App.vue
Затем я могу увидеть результат:
$ npm run serve
Вы можете проверить код в https://github.com/carlosrojaso/demo-native-web-components
Я надеюсь, что этот пост может быть полезным, и не забываю комментировать, если у вас есть вопросы, или писать мне в Twitter. Пока :)