反应createRef()与回调引用。使用一个相对于另一个有什么优势吗?

Vis*_*was 13 javascript reactjs

我最近开始研究React,并了解如何使用ref来获取DOM节点。在React文档中,他们提到了创建引用的两种方法。您能在什么情况下让我知道回调ref比createRef()好吗?我发现createRef更简单。尽管文档说“回调引用可以为您提供更精细的控制”,但我无法理解以哪种方式。谢谢

Tai*_* Ly 9

除了 jmargolisvt 所说的,我发现回调非常有趣的一件事是我可以在一个数组中设置多个引用,以便我可以更好地控制它。像这样:

class A extends React.Component {
    constructor(props) {
        super(props);
        this.inputs = [];
    }

    render() {
        return [0, 1, 2, 3].map((key, index) => (
            <Input 
                key={key} 
                ref={input => this.inputs[index] = input}
            />)
        );
    }
}
Run Code Online (Sandbox Code Playgroud)


jma*_*svt 6

createRef返回 DOM 节点或组件的已安装实例,具体取决于您调用它的位置。无论哪种方式,正如您所指出的,您手头的东西确实很简单。但是如果你想用那个引用做一些事情呢?如果您想在组件安装时执行此操作怎么办?

Ref 回调对此非常有用,因为它们在componentDidMount和之前被调用componentDidUpdate。这就是你如何对 ref 进行更细粒度的控制。你现在不仅仅是命令式地获取 DOM 元素,而是在 React 生命周期中动态更新 DOM,而是通过 ref API 对你的 DOM 进行细粒度的访问。


asi*_*niy 1

callback实际上,除了ref 在初始渲染之前返回 null之外,您不会发现任何差异。