Во Vue.js переиспользуемая логика играет ключевую роль в построении масштабируемых и поддерживаемых приложений. Основные инструменты для этого — миксины, композиционные функции и пользовательские хуки. Они позволяют отделить бизнес-логику от компонентов и использовать её повторно в разных местах.
Миксины — это объекты, содержащие свойства компонентов, методы, вычисляемые свойства и хуки жизненного цикла. При подключении миксина к компоненту его содержимое автоматически интегрируется в компонент.
Пример миксина:
// mixins/logger.js
export const loggerMixin = {
data() {
return {
logMessages: []
};
},
methods: {
log(message) {
this.logMessages.push(message);
console.log(message);
}
},
created() {
this.log('Компонент создан');
}
};
Использование миксина в компоненте:
- {{ msg }}
Особенности миксинов:
С введением Vue 3 и Composition API, композиционные функции стали предпочтительным способом переиспользования логики. Они представляют собой обычные функции JavaScript, которые возвращают реактивные данные, методы и вычисляемые свойства.
Пример композиционной функции:
// composables/useCounter.js
import { ref } from 'vue';
export function useCounter(initialValue = 0) {
const count = ref(initialValue);
function increment() {
count.value++;
}
function decrement() {
count.value--;
}
return { count, increment, decrement };
}
Использование в компоненте:
Счётчик: {{ count }}
Преимущества композиционных функций:
Пользовательские хуки — это разновидность композиционных функций, но они ориентированы на реактивность и управление состоянием. Хуки помогают организовать логику, связанную с жизненным циклом компонента, асинхронными запросами и побочными эффектами.
Пример пользовательского хука для API-запроса:
// composables/useFetch.js
import { ref } from 'vue';
export function useFetch(url) {
const data = ref(null);
const error = ref(null);
const loading = ref(false);
async function fetchData() {
loading.value = true;
error.value = null;
try {
const response = await fetch(url);
data.value = await response.json();
} catch (err) {
error.value = err;
} finally {
loading.value = false;
}
}
return { data, error, loading, fetchData };
}
Применение в компоненте:
Загрузка...
{{ data }}
{{ error.message }}
Ключевые моменты хуков:
Структурирование логики через Composition API позволяет создавать универсальные функции, которые можно использовать в компонентах, плагинах или других композиционных функциях, формируя тем самым масштабируемую архитектуру приложения.