Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该使用ref或findDOMNode来获取元素的根dom节点吗?_Javascript_Reactjs_Dom_React Dom - Fatal编程技术网

Javascript 我应该使用ref或findDOMNode来获取元素的根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 =

在这种情况下,我需要进行一些dom节点大小计算(渲染dom节点的顶部、底部和大小属性)

我现在在
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的情况下也是如此。