0

尝试使用 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 ( ... );
  }
});
4

2 回答 2

2

发生这种情况是因为 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 ( ... );
  }
});
于 2017-01-25T15:53:44.990 回答
2

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

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

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

  });
于 2017-01-25T16:08:37.963 回答