Перевод статьи: Nwose Lotanna Hooks are coming to Vue.js version 3.0
Эта статья знакомит с экспериментальной функцией Vue под названием Hooks.
Этот пост подходит для разработчиков всех уровней знания и опыта, включая начинающих. Но есть несколько вещей, которые вы должны уже знать, прежде чем читать эту статью.
Вам понадобится следующее на вашем компьютере:
node -v
npm uninstall -g vue-cli
затем установить новую:
npm install -g @vue/cli
npm install
Изначально компоненты React, содержащие логику состояний, должны быть компонентами класса. Несмотря на то, что в React уже были функциональные компоненты без сохранения состояния, необходимо было создать компоненты, которые бы соответствовали логике состояния, не будучи классами. Это было, причиной появления Hooks в React. Hooks — это способ использования логики состояний внутри функциональных компонентов (подробнее о функциональных компонентов можно почитать тут), что устраняет необходимость в написании классов.
Начнем с того, что с классами нет ничего плохого, но команда React обнаружила, что понимание того, как работают классы, является недостатком принятия React. Это может быть трудно понять и может стать двусмысленным, поскольку ваш проект увеличивается в размере и сложности.
Если вы разработчик Vue, вы можете задаться вопросом, почему мы сейчас обсуждаем классы, поскольку вы не используете классы по умолчанию в ваших проектах Vue. Хотя это действительно так, Vue JS позволяет вам использовать функциональные компоненты, которые не сохраняют состояния, с миксинами. С помощью Vue mixins вы можете определить логику или функциональность в конкретном файле и использовать их в функциональном компоненте.
В своем блоге несколько месяцев назад Sarah Drasner, очень популярный член основной команды Vue, написала о своей беседе с Evan You, создателем Vue JS. Сара показала, что миксин не может потреблять или использовать состояние из другого миксина, что затрудняет достижение цепочки инкапсулированной логики. Это недостаток mixin, которое решает Vue Hooks.
Vue Hooks — это, по сути, улучшенная версия миксинов, если вы не знаете, что такое миксины, они являются платформой в Vue, используемой для повторного использования логики между компонентами (далее вы увидите короткую демонстрацию миксинов в этом посте). Vue Hooks позволяет передавать логику из одного хука в другой, и вы также можете использовать состояние в хуке из другого хука. Как и в React, хуки в Vue определены в функциях, которые могут быть более понятным и гибким способом определения и совместного использования логики и могут возвращать состояние.
Если вы читали этот пост с самого начала, вы, должно быть, скачали файл стартового проекта и открыли его в своем приложении VS Code. Мы собираемся создать миксин, содержащий логику счетчика, а затем импортировать его в любой компонент по выбору. Сначала создайте папку с именем mixins в корневом каталоге и создайте новый файл, назовите его clickMixin.js и скопируйте нижеприведенный блок кода:
export default { data (){ return{ count: 1, double: 2 } }, methods: { clicked(){ this.count++; this.double = this.count*2; } } }
Этот миксин содержит логику счетчика, а также содержит переменную, которая возвращает удвоенное число, вы видите оператор экспорта, потому что он должен быть импортирован в выбранный вами компонент. Откройте ваш компонент Test.vue и скопируйте нижеприведенный блок кода:
<template> <div> <button v-on:click="clicked()">Button 1</button> <h2>{{this.count}}</h2> <h2>{{this.double}}</h2> </div> </template> <script> import clickMixin from '../Mixins/clickMixin' export default { name: 'Test', mixins: [clickMixin] } </script>
Здесь вы видите, как миксины импортируются и регистрируются под именем, это свойство экземпляра Vue, как данные, методы или вычисляемые свойства. Вы также видите, что внутри шаблона у вас есть доступ к этому в JavaScript, так как он относится к миксинам (почти так же, как миксин был определен прямо внутри компонента). Если вы запускаете приложение на своем сервере разработки, оно должно выглядеть так:
Когда вы нажимаете кнопку 1, счетчик увеличивается на 1, а нижняя цифра вдвое больше, чем цифра, как предлагает шаблон в вашем коде.
Вы можете легко воссоздать эту логику с помощью Vue Hooks, цель Hooks — потенциально заменить миксины в будущем. Прежде всего, вы должны установить пакет vue-Hooks с помощью менеджера пакетов. Откройте новый терминал в VS Code и запустите:
npm install vue-Hooks
Затем откройте ваш файл main.js и инициализируйте Hooks с помощью командной строки перед новым оператором Vue:
Vue.use(Hooks);
Откройте папку компонентов и создайте внутри нее новый файл, назовите его Modal.vue, затем вернитесь в корневой каталог и создайте новую папку с именем Hooks. Внутри папки Hooks создайте новый файл с именем Hooks.js и скопируйте в него следующий блок кода:
import { useData, useMounted, useEffect, useComputed, useUpdated} from 'vue-Hooks' export default function clickedHook(){ const data = useData({ count:1 }) const double = useComputed(() => data.count * 2) useMounted(()=> { console.log('mounted') }); useUpdated(()=> { console.log('updated') }); useEffect(()=> { console.log('DOM re-renders....') }); return { data, double } }
Как и в React, Vue Hooks заимствует синтаксис префикса использования и использует его способом принятым во Vue. Вы также заметили, что хуки жизненного цикла, доступные для каждого экземпляра Vue, доступны внутри хуков Vue, вот некоторые из них:
useData
: выполняет инициализацию данных внутри вашего хука, поэтому счетчик инициализируется внутри негоuseComputed
: это больше похоже на вычисляемые свойства внутри вашего хука, поэтому двойное вычисление выполняется внутри негоuseMounted
: действует точно так же, как смонтированный Hook жизненного цикла в вашем экземпляре Vue, но для HooksuseUpdated
: действует точно так же, как обновленный хук жизненного цикла в вашем экземпляре Vue, но для хуковuseEffect
: это обрабатывает логику при повторном рендере DOMЕсть и другие свойства, которые вы можете импортировать, весь список можно найти здесь, на GitHub. Вы заметите, что он экспортируется как функция, откройте файл modal.vue, который вы создали ранее, и скопируйте нижеприведенный блок кода внутри него:
<template> <div> <button v-on:click="data.count++">Button 2</button> <h2>{{data.count}}</h2> <h2>{{double}}</h2> </div> </template> <script> import clickedHook from '../Hooks/Hooks' export default { name: 'Modal', Hooks(){ return clickedHook(); } } </script>
Обратите внимание, что после импорта файла хуков вы можете получить доступ к данным и двойным константам, ранее определенным в хуке внутри этого компонента. Мы также видим, что регистрация Hooks имеет тот же синтаксис, что и регистрация данных, с установленной функцией и возвращаемым объектом внутри нее.
Вы можете использовать npm или просто перейти на GitHub по этой ссылке, чтобы получить репозиторий проекта.
Это был краткий обзор Hooks в Vue JS и того, как они отличаться от React Hooks, на базе которых они были созданы. Мы также рассмотрели миксины для читателей, которые не были знакомы с концепцией, и мы рассмотрели иллюстрацию с использованием хуков.
Краткий перевод: https://vuejs.org/guide/components/v-model.html Основное использование v-model используется для реализации двусторонней привязки в компоненте. Начиная с Vue…
Сегодня мы рады объявить о выпуске Vue 3.4 «🏀 Slam Dunk»! Этот выпуск включает в…
Vue.js — это универсальный и адаптируемый фреймворк. Благодаря своей отличительной архитектуре и системе реактивности Vue…
Недавно, у меня истек сертификат и пришлось заказывать новый и затем устанавливать на хостинг с…
Каким бы ни было ваше мнение о JavaScript, но всем известно, что работа с датами…
Все, кто следит за последними событиями в мире адаптивного дизайна, согласятся, что введение контейнерных запросов…