阻止的UI状态/在React中显示加载动画

时间:2016-12-11 10:23:12

标签: javascript reactjs react-jsx jsx

我想在对组件状态中存储的数据进行一些处理时显示加载动画。 布尔加载变量控制加载动画是否显示。这在我执行异步ajax请求时有效。 但是,当我尝试在组件方法中更改加载器的状态时,它不起作用。 我试图通过一个小的超时来避免阻止UI(请参阅代码中的注释),但无济于事。

如何在开始计算时显示加载动画并在之后再次隐藏它?

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. ...

2 个答案:

答案 0 :(得分:1)

对于浏览器中的繁重计算,您确实需要考虑使用worker。工作人员在后台工作,他们的目的是不阻止用户界面,

答案 1 :(得分:0)

在调用setTimeOut时,您实际上是将setState的结果传递给setTimeOut。像这样setTimeOut ......

calculateMovements() {
    this.setState({ loading: true});
    setTimeout(function() {
        // ...do expensive calculations on data here...
        this.setState({
            data: data,
            loading: false
        });
    }.bind(this), 10);
}

然后它会正常工作。