SetState()根本不会改变状态

时间:2019-08-08 09:00:13

标签: javascript reactjs setstate

我正在尝试设置布尔isLoading变量的setState,并使用它在组件顶部显示css加载器。所以我所做的是:

  • 单击按钮setState时,将isLoading变量从false设置为true,然后执行我的异步功能。

  • 异步完成后,我只是使用setState()将isLoading设置为false

我的问题是,当我第一次将isLoading变量设置为true时,它不会被设置,并且组件会在不更改状态的情况下进行reRender(我什至在render函数上控制台记录了该变量的状态)

我确实使用了如下所示的回调函数,但仍然没有用。

我的代码:

  async sendEmail({to,from,subject,html,text}){
    this.setState({
      isEmailLoading:true
    },()=>{
      emailRequests.SendAnEmail({
        to:to,
        text:text,
        subject:subject,
        html:html,
        from:from
      }).then((data)=>{
        this.setState({
           isEmailLoading:false,
         });
        toaster.success({
          title:"Email sent",
          text:"Your email was sent to "+to,
        });
        console.log(data);
      }).catch((error)=>{
        this.setState({
          isEmailLoading:false,
        });
        console.error(error);
        toaster.error({
          title:"Email not sent",
          text:"check console for more information",
        });
      })
    })

  }

我的状态:

this.state={
      email:{
        to:"",
        subject:"",
        from:"",
        html:"",
        text:""
      },
      isEmailLoading:false,
      isEmailError:false,
      isEmailSuccess:false,
      rawtext:""
    }

请帮助这绝对不正常。

FIX:

这很奇怪,我无法调试它,但事实证明,我使用的是第三方按钮组件,单击该组件不会改变状态,无论发生什么情况。

只需将该组件切换到另一个按钮组件即可。

0 个答案:

没有答案