@jaren
В React данные можно передавать между компонентами используя props или состояние.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//Родительский компонент import React from 'react'; import ChildComponent from './ChildComponent'; function ParentComponent() { const name = 'John'; return ( <div> <ChildComponent name={name} /> </div> ); } //Дочерний компонент import React from 'react'; function ChildComponent(props) { return <p>Hello, {props.name}</p>; } |
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
//Родительский компонент import React, { useState } from 'react'; import ChildComponent from './ChildComponent'; function ParentComponent() { const [name, setName] = useState('John'); return ( <div> <ChildComponent name={name} setName={setName} /> </div> ); } //Дочерний компонент import React from 'react'; function ChildComponent(props) { function handleChange(e) { props.setName(e.target.value); } return ( <div> <p>Hello, {props.name}</p> <input type="text" value={props.name} onChange={handleChange} /> </div> ); } |
Здесь мы определяем состояние name
в компоненте-родителе ParentComponent
и передаем его значение и функцию setName
в дочерний компонент ChildComponent
. В дочернем компоненте мы отображаем значение name
и вводим его в поле ввода. При изменении значения в поле ввода вызывается функция handleChange
, которая изменяет состояние name
с помощью функции setName
.
@jaren
Дополнительно к вышеперечисленному, в React также есть возможность использовать контекст (Context API) для передачи данных между компонентами без явной передачи через пропсы через каждый уровень вложенности. Контекст позволяет передавать данные глубоко в иерархии компонентов, обеспечивая доступ к этим данным во всех дочерних компонентах, не задействуя промежуточные компоненты.
Для использования контекста в React, необходимо создать и определить контекст с помощью функции createContext
, передав в нее значение по умолчанию. Затем, определите компонент-поставщик (Provider
) контекста, который будет оборачивать дочерние компоненты, и укажите значения для контекста. Наконец, используйте компонент-потребитель (Consumer
) контекста или хук useContext
в дочерних компонентах, чтобы получить доступ к данным контекста.
Пример использования контекста в React:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Создание контекста const MyContext = React.createContext('default value'); // Родительский компонент-поставщик function ParentComponent() { const data = 'information'; return ( <MyContext.Provider value={data}> <ChildComponent /> </MyContext.Provider> ); } // Дочерний компонент-потребитель function ChildComponent() { return ( <MyContext.Consumer> {value => <p>Data from context: {value}</p>} </MyContext.Consumer> ); } |
В данном примере значение data
, переданное из родительского компонента через контекст, доступно в дочернем компоненте ChildComponent
без необходимости передачи через пропсы.
Контекст предоставляет удобный способ для передачи данных, когда указанные решения с пропсами или состоянием могут быть неудобными из-за глубокой вложенности компонентов или необходимости передавать одни и те же данные в множество компонентов.