我应该使用 ref 还是 findDOMNode 来获取元素的react根 dom 节点?

IT技术 javascript reactjs dom react-dom
2021-05-11 08:50:03

我想进行一些 dom 节点大小计算(渲染的 DOM 节点的顶部、底部和大小属性)

我现在正在做的componentDidUpdate方法是在这个方法上调用 findDOMNode:

 componentDidUpdate() {
        var node = ReactDOM.findDOMNode(this);

        this.elementBox = node.getBoundingClientRect();
        this.elementHeight = node.clientHeight;
        // Make calculations and stuff
}

这工作正常,但我有点担心性能,并对最佳实践做出react。有几个地方谈到使用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
}

老实说,将 ref 回调附加到我的根 dom 节点只是为了获取它的引用对我来说并不正确。

在这种情况下,什么被认为是最佳实践?哪个性能更好?

1个回答

如果我参考文档(https://facebook.github.io/react/docs/react-dom.html#finddomnode),findDOMNode似乎更像是一种技巧而不是真正的选择。ref 似乎是最好的选择。文档实施了您在此处提供的相同草案(带有ref={(n) => this.node = n}