Передача данных от ребенка к родителю с помощью коллбека

Передача данных между компонентами в React

Julia Kravchenko
2 min readFeb 2, 2018

В реакте поток данных — однонаправленный. Это значит что данные передаются как водопад, сверху вниз, от родителя к ребенку, через props. Что такое props? Это неизменяемый объект, предназначенный только для чтения. Проще понять если думать о компонентах, как о функциях(а они по сути ими и являются), props—это просто аргумент функции, с которым мы можем работать внутри, но не изменять.

Родитель ➡️ Ребенок — используй Props

Это самый простой способ передачи данных.
1. В родительском компоненте передаём данные из стейта в дочерний.

<ChildComponent name={this.state.name} />

2. В дочернем принимаем и выводим.

<p>Props: {this.props.name}</p>

Родитель ⬅️ Ребенок — используй Callback

Эта передача данных напоминает мне бумеранг, есть точка старта — это наш родительский компонент, есть точка максимального отдаления — это дочерний компонент. И есть наш инструмент —бумеранг, в реакте это будет функция, которая находится в родителе и передаётся через props в ребенка, где и вызывается.

1. Создаём в родителе функцию updateData. У неё есть входной параметр value, этот параметр мы присваиваем в стейт нашего компонента, с помощью функции setState. Бумеранг готов!

updateData = (value) => {   this.setState({ name: value })}

2. Передаём в дочерний элемент через props функцию updateData. Мы запустили бумеранг :)

<ChildComponent updateData={this.updateData} />

3. В дочернем элементе я создала кнопку, при клике на неё будет вызываться функция, которую мы передавали с помощью props. Ей передается новый параметр для текста, именно его мы хотим передать в родителя. Бумеранг возвращается назад.

<button onClick={() => { this.props.updateData(this.state.name)}}>Запустить бумеранг</button>

Ребенок ➡️ Ребенок—используй родителя.

Для того чтобы передать данные между соседними компонентами, нужно использовать посредника—их родителя. Сначала нужно передать данные от ребенка к родителю как аргумент коллбека. Потом присвоить эти данные в стейт родителя и передать через props другому компоненту.

При создании вдохновлялась статьей: https://medium.com/@ruthmpardee/passing-data-between-react-components-103ad82ebd17

--

--