React setState不适用于侦听器模式

时间:2019-03-26 02:14:38

标签: reactjs

我的应用程序首先尝试登录。而且我有一个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被执行了!但这不会改变状态!

0 个答案:

没有答案