我的应用程序首先尝试登录。而且我有一个isLoginTried
状态,可以让我们知道登录是否已尝试。应用程序的入口点在登录组件上设置登录结果侦听器。登录组件通过调用该侦听器函数来发布结果。
并且侦听器功能将状态isLoginTried
设置为true。但是当我在setState
之后登录时,isLoginTried
仍然是false
!
我知道setState
函数是异步的,因此我使用setState
的回调函数对其进行了记录。我的代码段如下。请给我一些建议。谢谢。
+ MessageController
是一个实例。因此,它可以保留侦听器功能。
// GlobalApp.tsx
class GlobalApp extends Component {
constructor() {
super();
this.state= {
isLoginTried: false,
}
MessageController.setLoginResultListener(this.onLoginResult.bind(this));
}
...
onLoginResult(user: User) {
this.setState({
user,
isLoginTried: true,
}, () => {
console.log(this.state.isLoginTried); // it tells it's false!!
});
}
class UserDC() {
login() {
...
// This function always triggered
// no matter login has been successful or not
MessageController.postLoginResultListener(user);
}
}
onLoginResult
中的 GlobalApp
被执行了!但这不会改变状态!