React出现Cannot read properties of undefined (reading 'setState')报错怎么解决
问题排查与解决方案
问题原因
你的判断正确,该报错确实是this指向异常导致的。问题出在addDepartment(request).then(function(res){这行代码:你使用普通函数作为addDepartment的回调参数,普通函数的this会根据执行上下文动态绑定,在Promise回调场景下this不会指向CustomToolbar组件实例,而是undefined,因此调用this.setState会抛出对应类型错误。
解决方案
- 方案1(推荐):将
addDepartment的回调改为箭头函数,箭头函数会继承外层作用域的this指向,也就是当前组件实例:
将原有代码
addDepartment(request).then(function(res){
修改为
addDepartment(request).then((res) => {
即可解决问题。
- 方案2:在
HandleAdd方法顶部预先保存组件this指向,后续用保存的变量调用setState:
在HandleAdd开头新增一行const _this = this,后续把this.setState改为_this.setState即可。
补充优化建议
- 你当前的
HandleAdd已经使用了箭头函数语法,本身已经自动绑定了组件this,constructor里的this.HandleAdd = this.HandleAdd.bind(this)是冗余代码,可以直接删除。 - 调用
this.setState(Department)前,请确认Department是已经定义好的、符合你的state结构的对象,避免后续出现state相关的报错。
内容的提问来源于stack exchange,提问作者user15404864
相关产品推荐
相关产品推荐

