useRef
js
import React, { useRef, useEffect } from "react";
function MyComponent() {
const myRef = useRef(null); // 创建 Ref
useEffect(() => {
// 访问 DOM 元素
myRef.current.focus();
}, []);
return <input type="text" ref={myRef} />;
}
export default MyComponent;
回调ref
你也可以在函数组件中使用回调 Refs。这种方式下,你会提供 一个函数,该函数会在组件挂载和卸载时分别被调用,并将 DOM 节点或 组件实例作为参数。
js
import React, { useState, useEffect } from "react";
function MyComponent() {
const [ref, setRef] = useState(null)
useEffect(() => {
if(ref){
// 你现在可以访问 dom 节点或组件实例
}
}, [ref]);
return <input type="text" ref={node => setRef(node)} />;
}
export default MyComponent;
这两种创建 Ref 的方式主要区别在于:
- React.useRef() 创建的 Ref 更简洁,API 更一致,而且 Ref 的值在组件的整个生命周期中保持不变。
- 回调 Refs 更灵活,它允许你在组件挂载和卸载时执行一些额外的逻辑。但 是,如果回调函数是在 render 方法中定义的,那么每次 render 时都 会创建一个新的函数实例,可能会导致一些性能问题。
- 除非你有特殊需求,否则建议使用 React.useRef() 来创建 Ref。