Ref
创建及获取 ref 的方式
// 在类组件中创建 ref
class MyComponent extends Component {
ref1 =React.createRef(null) // ref1是一个对象
ref2 =null // ref2是一个函数
render=()=> {
<div>
<div ref={this.ref1}>Hello, ref1!</div>
{/* ref2是一个回调函数 */}
<div ref={(node)=>{
this.ref2 = node
console.log(this.node)
// 这里第一次打印是div,会在render之后以及componentDidMount之前执行。
// 更新后会在getSnapshotBeforeUpdate之后、componentDidUpdate之前执行
// 打印结果为null和<div>ref元素节点</div>,更新先会执行commitDetachRef方法把refs置为null,
//然后再通过commitAttachRef绑定为更新后的值
}}>Hello, ref2!</div>
</div>
}
}
// 在函数组件中创建 ref
function MyComponent() {
const childRef = useRef(null);
const divRef = useRef(null);
const handleClick = () => {
console.log(childRef.current); // 获取Child组件实例
console.log(divRef.current); // 获取div实例
};
render=()=> {
<div>
<div ref={childRef}>Hello, childRef!</div>;
<div ref={divRef}>Hello, div!</div>;
<Child ref={childRef} />
</div>
}
}forwardRef 的使用场景
ref 组件通信
使用ref缓存数据
Last updated