Итоги
В этом уроке вы узнали, что:
- Композабл — это функция, имя которой начинается с
use. Она используетref,computed,watchили хуки жизненного цикла Vue и возвращает то, что нужно компоненту: рефы, вычисляемые значения, функции. - Он лежит в отдельном файле
.jsи экспортируется под своим именем:export function useCounter(start) { … }. Компонент импортирует его в фигурных скобках,import { useCounter } from "./useCounter.js";, и вызывает в начале<script setup>. - Он возвращает несколько значений в объекте, который компонент разбирает,
const { count, increase } = useCounter(0);, либо один реф,const name = useLocalStorage("name", "");. - Параметры делают его пригодным для разных задач:
useLocalStorage(key, initial)сохраняет что угодно под любым ключом, аuseFetch(url)загружает любой файл. - Каждый вызов создаёт новые рефы, поэтому у каждого компонента своё состояние. Хуки жизненного цикла в композабле принадлежат компоненту, который его вызвал:
useFetch()загружает данные, когда этот компонент монтируется. - Состояние, общее для нескольких компонентов, — это реф вне любой функции, в модуле, например
export const order = ref([]);вorder.js, а рядом с ним — функции, которые его меняют. Модуль выполняется только один раз, поэтому каждый файл, который его импортирует, получает один и тот же реф. В больших приложениях для этого используют Pinia.
В следующем уроке, «Итоговый проект», вы соберёте весь курс воедино в собственном приложении — трекере привычек — и узнаете, как делать приложения на Vue на своём компьютере.
Но сначала потренируйтесь на композабле, который считает, как долго компонент находится на странице. Его будут использовать и App.vue, и Timer.vue, и каждый будет считать для себя.
Задание
- 1
В
useSeconds.jsнапишитеuseSeconds(): она создаёт рефsecondsсо значением 0, увеличивает его на 1 каждую секунду с момента монтирования компонента, останавливает интервал, когда компонент размонтируется, и возвращаетseconds. Используйте её вTimer.vue:const seconds = useSeconds();. - 2
Используйте её и в
App.vueи покажите еёsecondsвместо 0 в первом абзаце. Затем нажмитеПодано: таймер заказа исчезнет и остановится, а время, которое вы здесь провели, пойдёт дальше, потому что у каждого компонента свойsecondsи свой интервал.