Как передать данные в Vue 3 из Parent в Child?

В Vue 3 существует несколько способов передачи данных из родительского компонента в дочерний. Вот некоторые из них:

1. С помощью пропсов (props):
Это наиболее распространенный способ передачи данных в дочерний компонент во Vue. Вы можете определить пропсы в родительском компоненте и передать значения в них при использовании дочернего компонента.

В родительском компоненте:

   <template>
     <div>
       <child-component :data="parentData"></child-component>
     </div>
   </template>
   
   <script>
   import ChildComponent from './ChildComponent.vue';
   
   export default {
     components: {
       ChildComponent
     },
     data() {
       return {
         parentData: 'Данные из родительского компонента'
       };
     }
   }
   </script>

В дочернем компоненте:

   <template>
     <div>
       {{ data }} <!-- Вывод переданых данных из родительского компонента -->
     </div>
   </template>
   
   <script>
   export default {
     props: {
       data: {
         type: String,
         required: true
       }
     }
   }
   </script>

В этом примере мы определяем пропс "data" в дочернем компоненте с типом String и обязательным требованием. Затем мы передаем значение "parentData" из родительского компонента в компонент "child-component" с помощью синтаксиса "v-bind" (:).

2. С помощью контекста (provide/inject):
В Vue 3 был добавлен новый механизм под названием "provide" и "inject", который позволяет передавать данные из родительского компонента во всех его дочерних компонентах без необходимости явно указывать каждый пропс.

В родительском компоненте:

   <template>
     <div>
       <child-component></child-component>
     </div>
   </template>
   
   <script>
   import { provide } from 'vue';
   
   export default {
     setup() {
       const parentData = 'Данные из родительского компонента';
       provide('data', parentData);
     }
   }
   </script>

В дочернем компоненте:

   <template>
     <div>
       {{ data }} <!-- Вывод переданных данных из родительского компонента -->
     </div>
   </template>
   
   <script>
   import { inject } from 'vue';
   
   export default {
     setup() {
       const data = inject('data');
       return {
         data
       };
     }
   }
   </script>

В этом примере мы используем функциональный стиль компонента с помощью новой функции "setup()". Мы определяем значение "parentData" в родительском компоненте и передаем его с помощью "provide". Затем в дочернем компоненте мы использовали функцию "inject" для получения переданных данных.

Это только два способа передачи данных из родительского компонента в дочерний в Vue 3. Вам также доступны другие механизмы, такие как event bus, Vuex и т. д. в зависимости от ваших потребностей.