Недавно я протестировал Vue 3 с его новой функцией Composition API. Сначала я был сдержан, но как только я привык к этому, это превзошло мои ожидания.
Как было объявлено в Vue 3, Composition API предназначен для решения нескольких проблем:
- Компонентный код разбивался на множество частей, что затрудняло чтение и сопровождение.
- Логику компонентов было сложно разделить на несколько файлов.
- Поддержка TypeScript была плохой.
В дополнение к исправлению этих проблем, Vue 3 также предлагает новую вещь, которая называется Reactivity API, и именно об этом мы поговорим сегодня.
На самом деле, большинство проектов Vue.js используют Vuex для управления состоянием, и будьте уверены, Vuex все еще актуален. Но в течение нескольких месяцев было доступно несколько альтернатив:
- Создание собственного состояния с помощью Composition API и Reactivity API.
- Пиния, о которой мы здесь говорить не будем. Но я хотел упомянуть об этом, потому что это очень многообещающе.
Почему мы должны использовать эти решения вместо Vuex? Фактически, Vuex по-прежнему очень хорош благодаря поддержке плагинов и инструментов для разработки. Но я также думаю, что Vuex избыточен, потому что код выглядит повторяющимся, в основном из-за мутаций.
Давайте погрузимся в код. Мы возьмем здесь в качестве примера счетчик, разделенный на два компонента: счетчик, который будет отображать значение, и инкремент, который будет увеличивать значения (кажется логичным).
Прежде всего, мы определим наше состояние. Я обычно определяю его в каталоге с именем composables
или stores
.
Я объяснил все в комментариях, но здесь важно помнить, что нужно объявить состояние вне функции, а затем вернуть ссылку на состояние.
Как объясняется в документации Vue.js, если мы не укажем toRefs
, он будет передавать по значению, и, как вы можете видеть ниже, первая чашка не обновляется.
Как только наше компонуемое состояние определено, мы можем без проблем использовать его в наших компонентах Vue.js.
Counter.vue
отобразит значение счетчика.
Я максимально упростил код здесь. Более красивый рендер доступен на GitHub (с использованием TailwindCSS).
Increment.vue
будет увеличивать или уменьшать значения.
Как видите, мы можем использовать методы из составного объекта (например, increment
) или напрямую изменять состояние.
А как насчет других функций, таких как геттеры? Конечно, это возможно. Мы можем определить их в состоянии (useCounter.ts
) и использовать новую функцию computed
.
На этом статья закончится. Итак, мы видим здесь, что создание состояния с помощью Composition API до смешного просто и не требует каких-либо зависимостей.
Но стоит ли нам по-прежнему использовать Vuex? Это зависит. На самом деле я работаю над CRM-приложением, использующим Firebase и Vue 3, и все еще использую Vuex для аутентификации, потому что он отлично работает и хорошо реализован с Firebase.
Но, для сравнения, теперь я использую состояния Composition API для менее сложных случаев, например, когда нескольким компонентам нужны одни и те же данные.
Настройка нового Vuex Store, геттеров, мутаций, действий может быть утомительной для небольших фрагментов данных, поэтому я использую оба метода.
Вы можете найти код, который я использовал для написания этой статьи, на моем GitHub, прямо здесь:
Вы также можете найти превью здесь:
Если есть предложения, оставьте комментарий.
Больше контента на plainenglish.io