从子函数内部调用React setState

时间:2015-12-06 02:52:25

标签: meteor reactjs meteor-accounts

我有一个React组件,它有一个函数在其中一个函数中调用Meteor登录方法。如果登录成功,我需要调整组件状态,但这是失败的。我猜我需要另一个绑定(这个)或某个地方,但不知道在哪里。或者我可能需要将setState提取到另一个函数中并从此函数中调用它。什么样的典型/最好的方法是这样的?

-SomeComponent.jsx

handleSubmitLogin(e) {
  e.preventDefault();
  let email="my@email.com";
  let password='mypassword';
  Meteor.loginWithPassword(email, password, function(error) {
    if (Meteor.user()) {
      this.setState({  //<- ***THIS ERRORS WITH 'Cannot read property setState of undefined'***
        showLogin: false,
      });
    } else {
      console.log("There was an error logging in: "
        + error.reason);
    }
  })
}

TIA!

1 个答案:

答案 0 :(得分:3)

看起来你正在使用ES6,所以你可以使用箭头功能:

Meteor.loginWithPassword(email, password, (error) => { ... });

箭头函数有效地从其周围范围继承this,因此this将引用函数中正确的东西。

如果你被困在ES5上,你可以简单地绑定this上下文:

Meteor.loginWithPassword(email, password, function (error) { ... }.bind(this));