React setState 不起作用,出现错误

React setState not working, getting error

我在尝试使用 setState 时遇到以下错误:

Uncaught TypeError: Cannot read property 'setState' of null

我不知道我哪里错了,请有人指出我正确的方向。 这是我的代码:

export default React.createClass({
    getInitialState: function () {
      return {
        name: '',
        address: '',
        phone: '',
        email: '',
     }
   },

  componentWillMount(){
    this.getUserDetails();
  },

  getUserDetails: function(){
    var personID = 'ABC123'; 
    if(personID.length > 0){
      new Firebase('https://xxxxxxxxxx.firebaseio.com/users/' + personID).on('value', function(snap) {

        this.setState({
          name: snap.val().Name + " " +snap.val().Surname
        });

      });
     }
  },
  render() {
    return ( ... );
  }
});

发生这种情况是因为 this 的上下文不再是组件。你需要这个组件。看看我是怎么抓取这个组件的。

export default React.createClass({
    getInitialState: function () {
      return {
        name: '',
        address: '',
        phone: '',
        email: '',
     }
   },

  componentWillMount(){
    this.getUserDetails();
  },

  getUserDetails: function(){
    var that  = this
    var personID = 'ABC123'; 
    if(personID.length > 0){
      new Firebase('https://xxxxxxxxxx.firebaseio.com/users/' + personID).on('value', function(snap) {

        that.setState({
          name: snap.val().Name + " " +snap.val().Surname
        });

      });
     }
  },
  render() {
    return ( ... );
  }
});

就像人们在上面所说的那样,如果您只是将其编辑为箭头函数,它会将 this 的上下文从 Firebase 更改为外部范围 - 即组件。

  new Firebase('https://xxxxxxxxxx.firebaseio.com/users/' + personID).on('value', (snap) => {

    this.setState({
      name: snap.val().Name + " " +snap.val().Surname
    });

  });