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来避免这种情况 回调作为类上的绑定方法,但请注意,它不应该 在大多数情况下都很重要 这里是针对回调模式的要点。反应需要调用两次函数,因为第一次需要清除引用,然后分配新值 这只是一个性能建议,不是什么大问题,但是一个警告标志,因为还有其他更有效的方法