Я следил за этот пример для своего собственного кода, но состояние не обновляется после вызова асинхронной выборки при нажатии кнопки.
Это действительно простое приложение, когда пользователь загружает страницу, он также загружает состояние в componentDidMount(). Когда пользователь нажимает кнопку Получить «шутку», он снова устанавливает состояние с новой «шуткой».
При загрузке страницы шутка хорошо отрисовывается через пару миллисекунд. Но при нажатии кнопки в консоли отображается только выбранная «шутка», но состояние null.
При нажатии на кнопку я зарегистрировал объект this и он выглядит так, это правильно?

Вот код и приложение "работает": https://codesandbox.io/s/friendly-shirley-qupr4
Я ценю любые комментарии.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, вы забыли об обязательном действии. В JokeStat.js связать действие в
<JokesContext.Provider
value = {{
joke: this.state.joke,
getJoke: this.getJoke.bind(this)
}}
>
{this.props.children}
</JokesContext.Provider>
Или изменить
async getJoke() {
console.info("get joked triggered");
const joke = await fetchJoke();
console.info(joke,'joke')
console.info("state", this.state);
this.setState({ joke });
}
к
getJoke = async() => {
console.info("get joked triggered");
const joke = await fetchJoke();
console.info(joke,'joke')
console.info("state", this.state);
this.setState({ joke });
}
или 3-й вариант
<JokesContext.Provider
value = {{
joke: this.state.joke,
getJoke: ()=>this.getJoke()
}}
>
{this.props.children}
</JokesContext.Provider>