Изучение нового способа структурирования компонентов в приложениях Vue
Вступление
Vue существует уже некоторое время. Он набирает огромную популярность в сообществе разработчиков и сумел привлечь внимание многих разработчиков, отвечающих / angular. Во многом это произошло благодаря абсолютно простым и интуитивно понятным API-интерфейсам компонентов, которые существуют во Vue. Однако с Vue 3 разработчики решили изменить (или ввести альтернативу) способ создания компонентов во Vue. Это API композиции.
При первоначальном выпуске он вызвал неоднозначную реакцию сообщества, но постепенно и уверенно большинство разработчиков Vue пришли к пониманию того, насколько легко им пользоваться и насколько чистым он сделает код нашего приложения. Давайте сейчас углубимся в это и посмотрим, как он соотносится со стандартным API опций из предыдущих версий Vue.
Заявление об ограничении ответственности: это руководство предполагает предварительное знание JavaScript и VueJS. Если вы не знакомы с ними, я настоятельно рекомендую изучить их - они потрясающие!
Настройка нашего приложения
Вы можете клонировать исходный репозиторий кода отсюда. Я просто создал обычную страницу регистрации с полями username
и password
и кнопкой отправки, которая потенциально может выполнить вызов API для создания пользователя. Он также предоставляет пользователям возможность изменить язык с английского на испанский (Español). Все эти функции реализованы с помощью API параметров.
В демонстрационных целях в данном случае используется API JSONPlaceholder API, который имитирует запросы на публикацию.
Все, что вызывает беспокойство, происходит в самом App.vue
файле. Давайте посмотрим на это:
Мы создали два поля в data
, которые соответствуют двум полям ввода в приложении; username
и password
. У нас также есть методы обновления для каждого из этих data
полей; а именно updateUsername
и updatePassword
.
Примечание. Я знаю, что здесь можно было бы использовать
v-modal
, но идея этой статьи состоит в том, чтобы показать, насколько подробным может стать код при использовании API параметров.
У нас также есть свойство computed
, dictionary
, которое обновляет языковые строки на основе выбранного language
.
После заполнения формы пользователь может нажать кнопку «Зарегистрироваться», которая вызывает метод submit
в параметрах компонента. Эта функция обычно содержит некоторую бизнес-логику, соответствующую приложению, но на данный момент давайте просто вызовем API-интерфейс JSON-заполнителя и отобразим предупреждение, если все будет хорошо.
Эта проблема
Так что на первый взгляд этот код выглядит неплохо. Это то, с чем мы все знакомы / с которым удобно, и никогда нас не подводили.
Однако, если вы посмотрите на приложение с точки зрения «функций», вы заметите, что у нас есть signup
функция. Несмотря на то, что они являются частью одной функции, большинство элементов, таких как поля data
, обновление и отправка methods
, являются частью разных параметров. По мере роста приложения и появления пары дополнительных функций в нашем App
компоненте этот может становиться немного беспорядочным, потому что весь код, соответствующий данной функции, разбросан между различными параметрами компонента.
Создатели Vue осознали эту проблему, с которой сталкиваются некоторые довольно крупные проекты Vue, и предложили создать composition api
, который решает эту проблему.
Примечание. Если вы знакомы с React, то простой API композиции - это версия хуков React для Vue.
Давайте использовать этот новый API в нашем приложении:
Использование Composition API
В новом API Vue позволяет нам создать только один option
, а именно метод setup
, который «настраивает» наш компонент. Они также предоставили нам «перехватчики» для встроенных функций, таких как data
, computed
и параметры метода жизненного цикла из старого API.
Чтобы лучше понять это, давайте проведем рефакторинг нашего текущего приложения для использования composition
API.
Нам нужно сначала установить пакет api композиции и зарегистрировать его в нашем приложении:
yarn add @vue/composition-api
Зарегистрируйте этот плагин в своем main.js
:
Примечание. API композиции будет доступен по умолчанию в Vue 3. Вам не придется каждый раз регистрировать плагин. Но поскольку Vue 3 находится в альфа-версии, то. на момент написания этой статьи, а мы используем Vue 2, нам необходимо зарегистрировать его.
Давайте проведем рефакторинг 💪
Мы начнем наш рефакторинг с самого тривиального способа поддержания реактивности в приложениях Vue - атрибута data
.
Во Vue у нас есть два варианта сохранения этого; ref
и reactive
. Обычно вы используете ref
s, когда вам нужно сделать одно примитивное значение, чтобы иметь реактивность. reactive
можно использовать, когда у нас есть что-то вроде целого объекта для поддержания его реактивности. В нашем случае входные данные, которые мы используем, будут ref
s.
После рефакторинга файл App.vue должен выглядеть так:
Как видите, весь наш код теперь находится всего в одной setup
функции. Мы использовали ref
для поддержания реактивности клавиш username
, password
и language
. Наши methods
теперь просто стали обычными функциями, и мы использовали ловушку computed
для оценки значения нашего dictionary
на основе значения language
.
Здесь следует отметить несколько моментов:
1. Мы избавились от всех «загадок» старого API опций. Нет this
, теперь вы можете использовать стрелочные функции. Сейчас это чисто функциональное программирование.
2. Вы можете получить доступ только к тем вещам, которые вы «возвращаете» из своего setup
метода в вашем шаблоне. Это делает вещи более удобочитаемыми.
3. Когда вы используете значение ref
s в шаблоне, достаточно простого имени; но в методе setup
нам нужно использовать ref.value
. Я считаю, что это то, над чем работает основная команда.
4. Все «части» функции, которые ранее были разбросаны по разным «параметрам», теперь могут быть размещены в одном месте. Отлично, правда ?!
Для людей, которые все еще не впечатлены, есть еще один шаг, который мы можем сделать отсюда. API композиции позволяет нам «составлять» различные функции, а затем использовать их в нашем компоненте.
Чтобы лучше понять это, давайте переместим наши логин и языковые функции в две разные функции композиции.
Мы могли бы создать useLogin
композиционную функцию для потока входа в систему и useLanguage
для языковой функции:
Примечание. Здесь мы создаем две функции в одном файле, но в идеале вы должны создать их в отдельных файлах, предназначенных для каждой функции композиции; Таким образом, вы сможете разделить композиции между разными компонентами.
Как видите, функция setup
теперь очень мала и удобочитаема. Таким образом, вы можете извлекать крошечные функции как функции композиции и составлять их вместе в различных комбинациях в разных компонентах !!
Подводя итоги
Что ж, мы увидели, как работает API композиции, и увидели несколько способов его реализации. Пришло время обсудить, какую пользу это принесло:
- Мы пишем код более функционально. Это стиль, который предписывает Javascript. Такой код проще разбить на модули и повторно использовать. Например, наша функция
useLanguage
может использоваться в нескольких компонентах, требующих такого перевода. - В предыдущем API опций код упорядочен по функциям (данные, методы и т. Д.), А не по функциям (например, логин и язык). Это было прекрасно при разработке простых компонентов. Но по мере роста компонента отслеживание всех частей функции становилось сложной задачей. Функциональное разделение проблем, обеспечиваемое API композиции, делает код более читабельным.
- Модульное тестирование (еще одно сообщение в блоге об этом в ближайшее время?) Эти новые функции композиции становятся проще простого, потому что, как упоминалось ранее, они забирают большую часть эзотерических частей предыдущего API. Нет больше
this
и этого 😂
Я надеюсь, что эта статья послужила хорошим ориентиром для нового API композиции и вдохновила вас на Vue 3.
Напишите мне в twitter или оставьте свои предложения / мнения в комментариях ниже 👇
Ура ☕️
Собирайте компоненты Vue из любой кодовой базы в общую коллекцию
Используйте Bit » ( Github ), чтобы собрать компоненты Vue из вашего проекта и поделиться ими с коллекцией в bit.dev . Позвольте вам и вашей команде повторно использовать компоненты в нескольких проектах, чтобы ускорить разработку и сохранить согласованный дизайн.