以下是我用来设置状态的代码.
handleAddNewQuiz(event){ this.quiz = new Quiz(this.db,this.newQuizName,function(err,affected,value){ if(!err){ this.setState( { quiz : value}); // ERROR: Cannot read property 'setState' of undefined } }); event.preventDefault(); };
Rven虽然成功创建了数据库,但我无法调用this.state,因为它总是未定义的.
我试过了:
self = this; handleAddNewQuiz(event){ this.quiz = new Quiz(this.db,value){ if(!err){ self.setState( { quiz : value}); // ERROR: self.setState is not a function } }); event.preventDefault(); };
但它仍然失败,尝试用a = this,并使用a.setState,仍然没有运气.
我怎么解决这个问题?
解决方法
您需要使用回调方法绑定正确的此类(类上下文),然后只有您将能够访问类属性和方法.
可能的解决方案:
1-使用arrow function,如下所示:
handleAddNewQuiz(event){ this.quiz = new Quiz(this.db,(err,value) => { if(!err){ this.setState( { quiz : value}); } }); event.preventDefault(); };
2-或者使用.bind(this)和回调方法,如下所示:
handleAddNewQuiz(event){ this.quiz = new Quiz(this.db,value){ if(!err){ this.setState( { quiz : value}); } }.bind(this)); event.preventDefault(); };
你正在使用的方式也可以,在handleAddNewQuiz方法中保存这个引用,就像这样:
handleAddNewQuiz(event){ let self = this; //here save the reference of this this.quiz = new Quiz(this.db,value){ if(!err){ self.setState( { quiz : value}); } }); event.preventDefault(); };