📅  最后修改于: 2023-12-03 15:04:49.494000             🧑  作者: Mango
React Ref 是 React 提供的一种用于访问 DOM 或子组件的方法。在 React 中,我们通常使用虚拟 DOM 来管理组件的状态和渲染。但在某些情况下,我们需要访问浏览器 DOM,比如操作 TextInput 的焦点切换、操纵 canvas 等,这时就需要使用 React Ref。
创建 Ref 有两种方法,一种是使用 React.createRef()
函数来创建 Ref,另一种是使用回调函数。
使用 React.createRef()
函数创建 Ref:
import React from 'react';
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
}
render() {
return <div ref={this.myRef}>Hello, React Ref!</div>;
}
}
使用回调函数创建 Ref:
import React from 'react';
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = null;
this.setMyRef = element => {
this.myRef = element;
};
}
render() {
return <div ref={this.setMyRef}>Hello, React Ref!</div>;
}
}
Ref 的值是一个对象,可以通过 .current
属性来访问它所引用的 DOM 节点或组件实例。
使用 Ref 访问 DOM 节点:
import React from 'react';
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.myRef = React.createRef();
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.myRef.current.focus();
}
render() {
return (
<div>
<input type="text" ref={this.myRef} />
<button onClick={this.handleClick}>Focus</button>
</div>
);
}
}
使用 Ref 访问子组件:
import React from 'react';
class ParentComponent extends React.Component {
constructor(props) {
super(props);
this.childRef = React.createRef();
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
this.childRef.current.sayHello();
}
render() {
return (
<div>
<ChildComponent ref={this.childRef} />
<button onClick={this.handleClick}>Say Hello</button>
</div>
);
}
}
class ChildComponent extends React.Component {
sayHello() {
console.log('Hello, React Ref!');
}
render() {
return <div>Child Component</div>;
}
}
forwardRef
将 Ref 传递给它。null
,避免内存泄漏。