PassFront
  1. PassFront
  2. База знаний
  3. Компоненты

Как в 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

Другие вопросы раздела