无法在componentWillMount中找到属性集

时间:2016-06-01 16:47:07

标签: javascript reactjs react-native

我知道我错过了一些基本的东西,如果有人可以提供帮助,我会非常感激。这段代码给了我一个警告:"无法读取属性' setState' null。"

constructor(props) {
    super(props);
    this.state = {
      foundUser: false
}
   }

componentWillMount() {
  var requestEmail = this.props.email
  new Firebase(url)
    .orderByChild('email')
    .startAt(requestEmail)
    .endAt(requestEmail)
    .once('value', function (snap) {
      var foundUser = snap.val();
      if (foundUser) {
        this.setState({found: true})
      } else {
        this.setState({foundUser: false})
      } 
    });
},

render: function () {

  if (this.state.foundUser === false) {
    //render a scene here ...
  }

  return ( ....

2 个答案:

答案 0 :(得分:0)

您错过了组件的初始状态,尝试将以下功能添加到组件

getInitialState: function() {
  return {
     foundUser: false
  };
}

答案 1 :(得分:0)

使用this时,您需要确保拥有正确的组件上下文:

componentWillMount() {
  var self = this;
  var requestEmail = this.props.email
  new Firebase(url)
    .orderByChild('email')
    .startAt(requestEmail)
    .endAt(requestEmail)
    .once('value', function (snap) {
      var foundUser = snap.val();
      if (foundUser) {
        self.setState({found: true})
      } else {
        self.setState({foundUser: false})
      } 
    });
},

在变量中保存对this的引用,或者您可以使用.bind,甚至更好的es6箭头函数,因为它看起来像您正在使用es6。

  new Firebase(url)
    .orderByChild('email')
    .startAt(requestEmail)
    .endAt(requestEmail)
    .once('value', (snap) => {
      var foundUser = snap.val();
      if (foundUser) {
        this.setState({found: true})
      } else {
        this.setState({foundUser: false})
      } 
    });