Как в Vue пробросить свойства через несколько компонентов?
Компоненты
Чтобы не передавать props через каждый промежуточный компонент (prop drilling), во Vue используют provide / inject или общий store.
provide / inject
// в предке
import { provide, ref } from 'vue';
const user = ref({ name: 'Анна' });
provide('user', user);
// в любом потомке
import { inject } from 'vue';
const user = inject('user');- Промежуточные компоненты ничего не знают о передаваемых данных.
- Если передать
ref, потомки получат реактивное значение. - Менять данные лучше через функцию, которую тоже передали через provide, — так видно, кто владеет состоянием.
Pinia
Если данные нужны в разных ветках дерева, удобнее вынести их в store.
Когда props всё же лучше
Через 1–2 уровня обычные props нагляднее: зависимость видна в шаблоне.
Коротко для собеседования
Для глубокой передачи — provide/inject (с ref для реактивности), для общих данных — Pinia; через пару уровней хватает props.
Подробнее: Vue — Provide / Inject