我正在尝试设置布尔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:
这很奇怪,我无法调试它,但事实证明,我使用的是第三方按钮组件,单击该组件不会改变状态,无论发生什么情况。
只需将该组件切换到另一个按钮组件即可。