Использование Pinia в компонентах и composable'ах
Корректные паттерны использования предотвращают баги реактивности и сохраняют тестируемость бизнес-логики.
1. Фокус на интервью
- Паттерны использования на уровне компонентов
storeToRefsи реактивность- Оркестрация нескольких store в composable'ах
2. Использование в компонентах
<script setup lang="ts">
import { useAuthStore } from 'stores/auth.store';
import { storeToRefs } from 'pinia';
const authStore = useAuthStore();
const { token, isLoggedIn } = storeToRefs(authStore);
function logout() {
authStore.clearSession();
}
</script>
State/getters нужно извлекать через storeToRefs.
3. Паттерн оркестрации в composable
export function useCheckoutFlow() {
const cartStore = useCartStore();
const userStore = useUserStore();
async function checkout() {
await checkoutApi({
items: cartStore.items,
userId: userStore.id,
});
cartStore.clear();
}
return { checkout };
}
Размещайте cross-store бизнес-флоу в composable'ах, а не внутри одного store.
4. Правила коммуникации
- Предпочитайте composable'ы как слой координации
- Избегайте прямых циклических импортов store
- Держите store actions сфокусированными на одном домене
5. Советы по тестированию
- Мокайте store actions в тестах composable'ов
- Проверяйте переходы состояния, а не детали реализации
- Добавляйте регрессионные тесты для cross-store workflow
6. Краткое резюме для интервью
В компонентах я использую
storeToRefsдля реактивного извлечения состояния. Для multi-store workflow я композирую store в composable'ах, чтобы зависимости оставались направленными, а логика — тестируемой.