这个问题在这里已有答案:
第163行我有以下内容:
this.setState(data)
然后在它下面我有这个:
(function(data){
setTimeout(() => {
// do some stuff
}, 5)
}).call(this, data)
当我评论后者时,一切正常。当我把它留在那里时,出于某种原因我得到了来自第163行的未定义错误,说this.setState不是一个函数。
当我简单地用第二个片段替换时
setTimeout(() => {
// do stuff
}, 5)
再次,它工作正常(除了有时数据变量不是它应该是的事实...但不总是,但很奇怪)。
这是怎么回事?如果尚未执行的代码如何使this.setState
未定义?我甚至检查了调试器,这是设置为它应该是正确的,然后它抛出错误...我在这里错过了什么?
第二个代码块(IIFE)中的代码用括号括起来。在它之前有一个未经终止的声明。因此,JS解释器将调用this.setState()
的结果,该结果不是函数,从而导致错误。
在this.setState()
末尾添加分号应该可以解决它。
this.setState();