在反应加载屏幕中保持几个动作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在反应加载屏幕中保持几个动作相关的知识,希望对你有一定的参考价值。

在我的应用程序组件中,我提取了几个东西,所以有几个动作。这是一个国家组成部分。当其中一个操作结束时,isLoading属性更改为false并且屏幕加载消失。但它不能正常工作,因为一个动作可能比另一个动作花费更长时间。在完成所有isLoading操作后,如何将async属性更改为false?

我的代码看起来像

componentDidMount() {
  this.props.fetchA();
  this.props.fetchB();
  this.props.fetchC().then(() => {
    this.setState({isLoading: false})
  })
}
答案

你可以将这样的承诺链接起来

componentDidMount() {
   this.setState({ isLoading: true}); // start your loader

   this.props.fetchA()
   .then(() => {
     return this.props.fetchB();
   })
   .then(() => {
     return this.props.fetchC()
   })
   .then(() => {
     this.setState({ isLoading: false }); // Once done, set loader to false
   })
   .catch(error => {
     console.log('Oh no, something went wrong', error);
   });
}

或者使用async / await和try catch做一些像这样的事情。

constructor () {
   super();
   this.state = {
     isLoading: false,
   };
   this.onLoadData = this.onLoadData.bind(this); // see what I did here, i binded it with "this"
}

componentDidMount() {
   this.onLoadData(); // Call you async method here
}

async onLoadData () {
   this.setState({ isLoading: true}); // start your loader
   try {
     const awaitA = await this.props.fetchA();
     const awaitB = await this.props.fetchB();
     const awaitC = await this.props.fetchC();
     this.setState({ isLoading: false }); // Once done, set loader to false
   } catch (e) {
     console.log('Oh no, something went wrong', error);
   }
}

以上是关于在反应加载屏幕中保持几个动作的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer 将应用程序保持在加载屏幕中

在我旋转屏幕之前,LiveData 不会加载到片段中

Android滚动问题

反应中的全局屏幕加载器

滑出保持突出显示的导航项

纹理上的片段着色器