Я хочу показать анимацию загрузки, пока выполняю некоторую обработку данных, которые хранятся в состоянии компонентов. Логическая переменная загрузки определяет, отображается ли анимация загрузки или нет. Это работает, когда я выполняю асинхронный запрос ajax. Однако, когда я пытаюсь изменить состояние загрузчика в компонентном методе, он не работает. Я пытался избежать блокировки пользовательского интерфейса с небольшим таймаутом (см. Комментарий в коде), но безрезультатно.Заблокированное состояние пользовательского интерфейса/Отображение анимации загрузки в реакторе
Как показать анимацию загрузки при запуске вычислений и скрыть ее снова?
calculateMovements() {
// show the loading animation
this.setState({
loading: true
});
let data = this.state.data;
// ...do expensive calculations on data here...
// avoid blocking UI
setTimeout(function() {
// redraw with updated data
this.setState({
data,
loading: false
});
}.bind(this), 10);
},
render() {
return (
<MuiThemeProvider>
<div id="wrap">
<Loader
visible={this.state.loading}
/>
// etc. ...
Вы правы, я назвал SetTimeout неправильно. Однако после реализации изменений анимация загрузки пока не отображается. Вся страница замерзает в течение нескольких секунд до того, как отображается окончательное состояние (теперь завернутое в setTimeout). – reggie