我看到一些不同的文章说refs是代替#id选择器做事情的"反应方式"。我不知道为什么。使用refs而不是#id的解释是什么?
import {useRef} from 'react';
function Home() {
const exampleRef = useRef(null)
return (
<div ref={exampleRef}> Hello world </div>
)
}
export default Home;
与
function Home() {
return (
<div id='example'> Hello world </div>
)
}
我可以想到两个主要原因:
-
可以跳过
Document.getElementById()
直接接入exampleRef.current
-
useRef
对象的current
属性是完全可变的,可以赋任意值。改变它不会触发完整的组件重新渲染(就像从useState
钩子调用setter函数一样),这有时是性能所必需的。
有时候w3schools的文章缺乏实质内容,但是他们的useRef
文章有一些简单用例的好例子。
ReactuseRef
返回一个对象,该对象在重新渲染之间保持相同的引用,但current
属性是可变的。
ref
优于getElementById
的原因是
-
它很容易访问,不需要定义一个id到你的DOM节点只是为了访问它。
-
不像
ids
ref是唯一的,你在声明它的时候不需要担心它。如果文档中有多个具有相同id
的DOM节点,则getElementById
可能不会返回您期望的元素。
你可以在React的beta文档
中阅读更多关于refs的信息