Ну, поскольку у нас не так много кода, я могу только догадываться, что может быть полезно для вас.Но вот как это можно сделать для асинхронных операций:
import React, { PureComponent, createContext } from 'react';
import axios from 'axios';
const getDefaultContext = () => ({
books: null,
fetchBooks: () => {},
})
const Context = createContext(getDefaultContext());
class BookProvider extends PureComponent {
constructor(props) {
super(props);
this.fetchBooks = this.fetchBooks.bind(this);
this.state = {
books: null,
fetchBooks: this.fetchBooks,
};
}
fetchBooks() {
axios
.get('http://something')
.then(response => {
this.setState(prevState => { ...prevState, books: response.books });
});
}
render() {
const { children } = this.props;
return (
<Context.Provider context={this.state}>
{children}
</Context.Provider>
);
}
}
А потом, у некоторых из ваших детей:
<Context.Consumer>
{context => <Button onClick={context.fetchBooks}>Load books</Button>}
</Context.Consumer>
Но ваш код действительно не похож на васиспользуя контекстный API ...