В документации React говорится, что функция, определенная в корневом компоненте, должна передаваться дочернему компоненту, если вы планируете обновить контекст из вложенного компонента.
Я реализовал то же самое:
import React from 'react';
const DataContext = React.createContext();
/**
* The App.
*/
export default class App extends React.Component {
constructor() {
super();
this.updateGreet = this.updateGreet.bind( this );
this.state = {
greet: '',
updateGreet: this.updateGreet
}
}
updateGreet() {
this.setState({
greet: 'Hello, User',
});
}
render() {
return (
<DataContext.Provider value={ this.state }>
<GreetButton />
<DisplayBox />
</DataContext.Provider>
)
}
}
/**
* Just a button element. On clicking it sets the state of `greet` variable.
*/
const GreetButton = () => {
return (
<DataContext.Consumer>
{
( { updateGreet } ) => {
return <button onClick={ updateGreet }>Greet</button>
}
}
</DataContext.Consumer>
)
}
/**
* Prints the value of `greet` variable between <h1> tags.
*/
const DisplayBox = () => {
return (
<DataContext.Consumer>
{
( { greet } ) => {
return <h1>{ greet }</h1>
}
}
</DataContext.Consumer>
)
}
Это очень простое приложение React, которое я создал для изучения Context API. Я пытаюсь добиться определения метода updateGreet()
внутри компонента GreetButton
вместо определения его внутри компонента App
, поскольку функция не имеет ничего общего с компонентом App
.
Другое преимущество, которое я вижу, заключается в том, что если я решу полностью удалить компонент GreetButton
, мне не нужно отслеживать все методы, которые он использует, определенные в других компонентах.
Есть ли способ, которым мы можем достичь этого?