Javascript 获取DOM节点的componentDidMount获取错误

Javascript 获取DOM节点的componentDidMount获取错误,javascript,reactjs,Javascript,Reactjs,我得到了类型错误:无法读取未定义的属性“offsetHeight” 当试图离开dom节点的视线时 componentDidMount() { setTimeout(function(){ console.log(this.contentBody.offsetHeight) },1000) } 我怀疑这是由于我的async没有设置ref。我的渲染方法如下所示 <div ref={elem => this.contentB

我得到了类型错误:无法读取未定义的属性“offsetHeight” 当试图离开dom节点的视线时

componentDidMount() {
        setTimeout(function(){
            console.log(this.contentBody.offsetHeight)
        },1000)
    }
我怀疑这是由于我的async没有设置ref。我的渲染方法如下所示

<div ref={elem => this.contentBody = elem} className="content-body" dangerouslySetInnerHTML={createMarkupFromReferenceContent()} />
this.contentBody=elem}className=“content body”dangerouslysetinerhtml={createmarkupfromfreferencecontent()}/>

我尝试在这里创建一个非ajax的演示,它成功了。这就是为什么我尝试上面的setTimeout破解,但没有运气。有没有解决这个问题的线索?

您必须将
这个
绑定到setTimeout回调函数。像这样:

componentDidMount(){
setTimeout(函数(){
console.log(this.contentBody.offsetHeight)
}绑定(这个);

}
您必须将此
绑定到setTimeout回调函数。像这样:

componentDidMount(){
setTimeout(函数(){
console.log(this.contentBody.offsetHeight)
}绑定(这个);

}
引用最近的范围,因此当您将其与回调函数一起使用时,此
指向回调函数,而不是您的对象

在ECMAScript 2015中,可以使用箭头函数修复此问题:

componentDidMount() {
    setTimeout(()=>{
        console.log(this.contentBody.offsetHeight)
    },1000)
}
但这种语法在旧浏览器中不受支持(特别是IE)

但如果需要跨浏览器支持,只需使用变量:

componentDidMount() {
    var self = this;
    setTimeout(function(){
        console.log(self.contentBody.offsetHeight);
    },1000)
}

引用最接近的范围,因此当您将其与回调函数一起使用时,
指向回调函数,而不是您的对象

在ECMAScript 2015中,可以使用箭头函数修复此问题:

componentDidMount() {
    setTimeout(()=>{
        console.log(this.contentBody.offsetHeight)
    },1000)
}
但这种语法在旧浏览器中不受支持(特别是IE)

但如果需要跨浏览器支持,只需使用变量:

componentDidMount() {
    var self = this;
    setTimeout(function(){
        console.log(self.contentBody.offsetHeight);
    },1000)
}

setTimeout函数中存在绑定问题可能重复setTimeout函数中存在绑定问题可能重复