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
Reactjs 使用useRef或createRef而不是内联ref有什么优势?_Reactjs_Ref_Use Ref_Create Ref - Fatal编程技术网

Reactjs 使用useRef或createRef而不是内联ref有什么优势?

Reactjs 使用useRef或createRef而不是内联ref有什么优势?,reactjs,ref,use-ref,create-ref,Reactjs,Ref,Use Ref,Create Ref,我正在进行代码审查,发现代码是由另一位开发人员编写的,例如: function sampleComponent() { let divRef = {}; return ( <div ref={(el) => { divRef = el }}></div> ) } 然后使用divRef作为DOM元素的引用 然而,我知道的模式是在类组件中使用createRef,在函数组件中使用useRef钩子

我正在进行代码审查,发现代码是由另一位开发人员编写的,例如:

function sampleComponent() {
       let divRef = {};
    
       return (
        <div ref={(el) => { divRef = el }}></div>
       )
    }
然后使用divRef作为DOM元素的引用

然而,我知道的模式是在类组件中使用createRef,在函数组件中使用useRef钩子。甚至ReactJS的官员也表示,在未来的React版本中避免内联引用。这是一种传统的写作模式吗

到目前为止,我可以研究的是,inline ref将呈现函数两次,因此建议避免


我想知道还有什么其他的解释吗?

我认为他们建议不要使用,因为这是一个遗留API。没有提到不建议使用内联引用。正如您所提到的,回调引用/内联引用多次调用函数,这可能是它们的主要警告

在任何情况下,我认为如果不需要粒度,createRef或useRef更适合作为最佳实践


对我来说,我尽量使用createRef和useRef,因为它们使用myRef.current而不仅仅是myRef,以避免被它弄糊涂。

我认为他们建议不要使用它,因为它是一个遗留API。没有提到不建议使用内联引用。正如您所提到的,回调引用/内联引用多次调用函数,这可能是它们的主要警告

在任何情况下,我认为如果不需要粒度,createRef或useRef更适合作为最佳实践


对我来说,我尽量使用createRef和useRef,因为它们使用myRef.current而不仅仅是myRef,以避免被它弄糊涂。

要记住两个细节

遗留API:字符串引用如果您以前使用过React,您可能会 熟悉ref属性为字符串的旧API,如 textInput,DOM节点作为this.refs.textInput访问。我们 建议不要这样做,因为字符串引用存在一些问题 遗留的,并且可能会在将来的某个版本中删除

这并不意味着内联引用,这意味着字符串引用,内联引用可以是回调模式。 在这一点之前,这只意味着不建议使用String Ref,因为它是遗留的,在不久的将来将被删除。实际上,将react用作参考函数或更复杂的对象以允许提前使用

如果ref回调被定义为内联回调,则对回调ref进行警告 函数,它将在更新期间被调用两次,第一次调用null和 然后再次使用DOM元素。这是因为 函数是在每次渲染时创建的,因此React需要清除旧的 参考并设置新的。您可以通过定义ref来避免这种情况 回调作为类上的绑定方法,但请注意,它不应该 在大多数情况下都很重要

这里是针对回调模式的要点。反应需要调用两次函数,因为第一次需要清除引用,然后分配新值


这只是一个性能建议,不是什么大问题,但是一个警告标志,因为还有其他更有效的方法。

要记住两个细节

遗留API:字符串引用如果您以前使用过React,您可能会 熟悉ref属性为字符串的旧API,如 textInput,DOM节点作为this.refs.textInput访问。我们 建议不要这样做,因为字符串引用存在一些问题 遗留的,并且可能会在将来的某个版本中删除

这并不意味着内联引用,这意味着字符串引用,内联引用可以是回调模式。 在这一点之前,这只意味着不建议使用String Ref,因为它是遗留的,在不久的将来将被删除。实际上,将react用作参考函数或更复杂的对象以允许提前使用

如果ref回调被定义为内联回调,则对回调ref进行警告 函数,它将在更新期间被调用两次,第一次调用null和 然后再次使用DOM元素。这是因为 函数是在每次渲染时创建的,因此React需要清除旧的 参考并设置新的。您可以通过定义ref来避免这种情况 回调作为类上的绑定方法,但请注意,它不应该 在大多数情况下都很重要

这里是针对回调模式的要点。反应需要调用两次函数,因为第一次需要清除引用,然后分配新值

这只是一个性能建议,不是什么大问题,但是一个警告标志,因为还有其他更有效的方法