Мы бы написали базовый пример с родительским и дочерним компонентами. У родительского компонента будет значение счетчика. Дочерний компонент содержит две кнопки: увеличения и уменьшения. После нажатия кнопки мы соответствующим образом обновим значение счетчика родительского элемента.

Сначала мы должны создать родительский компонент с именем App и инициализировать его значением счетчика 0. Также мы определяем функцию с именем updateCounter, которая будет либо увеличивать, либо уменьшать значение в зависимости от переданного параметра.

Итак, наш родительский компонент будет следующим:

class App extends React.Component {
constructor (props) {
super (props);
this.state = {
counter: 0
}
this.updateCounter = this.updateCounter.bind (this);

}
updateCounter (type) {
var count = this.state.counter;
type = = 'приращение'? count ++: count -;
this.setState ({counter: count});
}

render () {
return (‹div›
Значение счетчика в родительском элементе: {this.state.counter}

‹/div›
)
}
}

Теперь мы должны создать дочерний компонент с двумя кнопками.

class Child extends React.Component {
constructor (props) {
super (props);
}
render () {
return (‹div›
‹H1› Здравствуйте, React .. ‹/h1›
‹p› Я являюсь дочерним элементом, а кнопки ниже - дочерними. Нажмите соответствующую кнопку, чтобы обновить значение счетчика в родительском элементе ‹/p›
‹Button› Увеличение ‹/button› ‹br/› ‹br/›
‹button› Уменьшение ‹/button›

‹/div›
)
}

}

Теперь, чтобы сделать функцию updateCounter в родительском компоненте доступной для дочернего компонента, мы передаем ее как свойство дочернему компоненту. Блок рендеринга в нашем компоненте Parent / App можно обновить следующим образом:

render () {
return (‹div›
Значение счетчика в родительском элементе: {this.state.counter}
‹Дочерний onClick = {this.updateCounter} /›
‹ / div ›
)
}

Чтобы использовать функцию в дочернем компоненте, теперь мы можем просто использовать {this.props.onClick} при нажатии кнопки в дочернем компоненте и передать соответствующий параметр

Наш блок рендеринга будет выглядеть следующим образом:

render () {
return (‹div›
‹h1› Здравствуйте, React .. ‹/h1›
‹p› Я являюсь дочерним элементом, а кнопки ниже - дочерними. Нажмите на соответствующая кнопка для обновления значения счетчика в родительской кнопке ‹/p›
‹onClick = {(e) =› this.props.onClick ('increment')} ›Increment ‹/button› ‹br/›‹ br / ›
‹ кнопка onClick = {(e) = ›this.props.onClick ('декремент')}› Уменьшение ‹/button›

‹/div›
)
}

Окончательный код:

class App extends React.Component {
constructor (props) {
super (props);
this.state = {
counter: 0
}
this.updateCounter = this.updateCounter.bind (this);

}
updateCounter (type) {
var count = this.state.counter;
type = = 'приращение'? count ++: count -;
this.setState ({counter: count});
}

render () {
return (‹div›
Значение счетчика в родительском элементе: {this.state.counter}
‹Дочерний onClick = {this.updateCounter} /›
‹/div›
)
}
}

class Child extends React.Component {
constructor (props) {
super (props);
}
render () {
return (‹div›
‹H1› Здравствуйте, React .. ‹/h1›
‹p› Я являюсь дочерним элементом, а кнопки ниже - дочерними. Нажмите соответствующую кнопку, чтобы обновить значение счетчика в родительском элементе ‹/p›
‹Кнопка onClick = {(e) =› this.props.onClick ('increment')} ›Увеличение ‹/button› ‹br/› ‹br/›
‹ кнопка onClick = {(e) = › this.props.onClick ('декремент')} ›Декремент ‹/button›

‹/div›
)
}

}

Рабочий пример того же можно найти в следующем плункере.

Демо: