\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\n\n**Проблемы:**\n1. GrandParent и Parent содержат props которые не используют\n2. Сложно отследить откуда пришло значение\n3. При изменении структуры нужно менять все промежуточные компоненты\n4. Код сложно поддерживать и тестировать\n\n### Решение 1: Использование `v-bind=\"$attrs\"`\n\nВ Vue 3 (и Vue 2.4+) можно пробросить все не учтенные props одной строкой:\n\n```vue\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\n\n**Преимущества:**\n- GrandParent и Parent не нужно обновлять при добавлении новых props\n- Меньше кода\n- Явно видно что пробрасывается (v-bind=\"$attrs\")\n\n### Решение 2: Provide/Inject (Vue 2.2+)\n\nЭто как глобальный контекст, но для дерева компонентов. **Лучше для глубокого проброса без промежуточных props.**\n\n```vue\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\n\n**Преимущества:**\n- GrandParent и Parent вообще не знают о данных\n- Идеально для глубокой вложенности\n- Очень чисто и удобно\n\n**Недостатки:**\n- Сложнее отследить откуда пришло значение (неявная зависимость)\n- Не реактивно по умолчанию (нужны небольшие хаки)\n\n### Решение 3: Reaktivne Provide/Inject\n\nЕсли нужно чтобы значение обновлялось в реальном времени:\n\n```vue\n\n\n\n\n\n\n\n```\n\n### Решение 4: Composition API (Vue 3)\n\nЗначительно проще и чище с Composition API:\n\n```vue\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\n\n**Это самый чистый и современный способ!**\n\n### Решение 5: Глобальный State (Pinia/Vuex)\n\nДля действительно глобального состояния (используется многими компонентами):\n\n**С Pinia (рекомендуется в Vue 3):**\n\n```javascript\n// stores/app.js\nimport { defineStore } from 'pinia';\nimport { ref } from 'vue';\n\nexport const useAppStore = defineStore('app', () => {\n const message = ref('Hello from App');\n const theme = ref('dark');\n const userId = ref(123);\n\n return { message, theme, userId };\n});\n```\n\n```vue\n\n\n\n\n```\n\n**С Vuex (Vue 2):**\n\n```javascript\n// store.js\nexport default new Vuex.Store({\n state: {\n message: 'Hello from App',\n theme: 'dark',\n userId: 123\n }\n});\n```\n\n```vue\n\n\n```\n\n### Сравнение решений\n\n| Подход | Глубина | Реактивно | Сложность | Использование |\n|--------|---------|-----------|-----------|---------------|\n| Props | 1-2 уровня | Да | Низкая | Простая передача данных |\n| v-bind=\"$attrs\" | 3+ уровня | Да | Низкая | Props drilling |\n| Provide/Inject | 5+ уровней | Частично | Средняя | Контекст для дерева |\n| Composition API | 5+ уровней | Да | Низкая (Vue 3) | Рекомендуется в Vue 3 |\n| Pinia/Vuex | Любая | Да | Высокая | Глобальное состояние |\n\n### Практический пример: Тема приложения\n\nЭто частая задача - пробросить тему через все компоненты.\n\n**Плохо (Props drilling):**\n```vue\n\n
\n\n
Как в Vue пробросить свойства через несколько компонентов? | PrepBro