Javascript 我应该使用ref或findDOMNode来获取元素的根dom节点吗?
在这种情况下,我需要进行一些dom节点大小计算(渲染dom节点的顶部、底部和大小属性) 我现在在Javascript 我应该使用ref或findDOMNode来获取元素的根dom节点吗?,javascript,reactjs,dom,react-dom,Javascript,Reactjs,Dom,React Dom,在这种情况下,我需要进行一些dom节点大小计算(渲染dom节点的顶部、底部和大小属性) 我现在在componentdiddupdate方法上做的是在以下位置调用findDOMNode: componentDidUpdate() { var node = ReactDOM.findDOMNode(this); this.elementBox = node.getBoundingClientRect(); this.elementHeight =
componentdiddupdate
方法上做的是在以下位置调用findDOMNode:
componentDidUpdate() {
var node = ReactDOM.findDOMNode(this);
this.elementBox = node.getBoundingClientRect();
this.elementHeight = node.clientHeight;
// Make calculations and stuff
}
这很好,但我有点担心性能,并对最佳实践作出反应。有几个地方谈到使用ref
属性而不是findDOMNode,但所有这些都是针对子dom元素的,在我的例子中,我只想要组件的根dom节点
使用ref的备选方案可能如下所示:
render(){
return (
<section // container
ref={(n) => this.node = n}>
// Stuff
</section>
}
componentDidUpdate() {
this.elementBox = this.node.getBoundingClientRect();
this.elementHeight = this.node.clientHeight;
// Make calculations and stuff
}
render(){
返回(
this.node=n}>
//东西
}
componentDidUpdate(){
this.elementBox=this.node.getBoundingClientRect();
this.element高度=this.node.clientHeight;
//算计
}
老实说,将ref回调附加到我的根dom节点只是为了获取它的引用,我觉得这是不正确的
在这种情况下,什么被认为是最佳实践?哪一个具有更好的性能?如果我参考文档(),
findDOMNode
似乎更像是一个技巧,而不是一个实物期权。ref似乎是最佳选择。实现了您在这里给出的相同草案(使用ref={(n)=>this.node=n}
)再次阅读我刚找到的文档:>使用ref回调函数来设置类的属性是访问DOM元素的常见模式。首选方法是像上面的示例一样在ref回调函数中设置属性。顺便说一句,我不知道您是否注意到了,但是我使用的JS标准函数抱怨{(n)=>this.node=n}
说“箭头函数不应该返回赋值。”我想知道这是否合法not@revelt它不会导致运行时错误,但实际上意味着您不应该返回赋值。简单修复:{(n)=>{this.node=n}
遗憾的是,似乎还没有任何框架将此ref处理和defaulut应用于findDOMNode,即使在给定ref的情况下也是如此。