反应本机正确的方式来取消组件内部的承诺确实安装并优化了组件

问题描述

我正在尝试在componentDidMount内部处理一个Promise,我想防止对Promise的无限调用,所以我想实现一个isMounted变量,但是我真的不明白何时将isMounted设置为false来取消Promise打电话。

我的想法是在componentWillUnmount内部将isMounted设置为false。

所以我的逻辑是在安装组件时调用promise,而在卸载组件时保留promise:

async componentDidMount() {
    if (isMounted) {
      try {
        await RegistrationService.getData();
      } catch (error) {
        console.log(error);
      }
    }
  }

  componentWillUnmount() {
    isMounted = false;
  }

如果有人能帮助我了解生命周期中的关键时刻以及何时应该停止对诺言的呼叫,我将不胜感激

解决方法

我认为一种更好的方法是这样做:

     state = {
          ready: false
     }

     async componentDidMount() {
          if (ready === false) {
               try {
                    await RegistrationService.getData();
                    this.setState({ ready: true });
               } catch (error) {
                    console.log(error);
               }
          }
     }

关于此:

如果有人可以帮助我了解那些内容,我将非常感激 生命周期的时刻以及我何时应该停止对诺言的呼叫

学习功能组件并使用挂钩!!
它将改变您的生活(嗯,您的“反应”生活...)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...