当前位置:首页 > React

react refs 如何使用

2026-01-15 11:28:38React

React Refs 的基本概念

Refs 是 React 提供的一种访问 DOM 节点或 React 组件实例的方式。通常在 React 的数据流中,父子组件通过 props 进行通信,但在某些情况下需要直接操作 DOM 或组件实例,这时可以使用 Refs。

创建 Refs

使用 React.createRef() 可以创建一个 Ref 对象。通常在组件的构造函数中初始化 Ref,并将其附加到 React 元素的 ref 属性上。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = React.createRef();
  }

  render() {
    return <div ref={this.myRef} />;
  }
}

访问 Refs

通过 Ref 对象的 current 属性可以访问到附加的 DOM 节点或组件实例。

react refs 如何使用

componentDidMount() {
  console.log(this.myRef.current); // 输出 DOM 节点
}

回调 Refs

除了 React.createRef(),还可以使用回调函数的方式创建 Refs。回调函数会在组件挂载或卸载时被调用,接收 DOM 节点或组件实例作为参数。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.myRef = null;
    this.setMyRef = element => {
      this.myRef = element;
    };
  }

  componentDidMount() {
    console.log(this.myRef); // 输出 DOM 节点
  }

  render() {
    return <div ref={this.setMyRef} />;
  }
}

函数组件中的 Refs

在函数组件中,可以使用 useRef Hook 来创建 Refs。useRef 返回一个可变的 Ref 对象,其 current 属性被初始化为传入的参数。

react refs 如何使用

function MyFunctionalComponent() {
  const myRef = React.useRef(null);

  React.useEffect(() => {
    console.log(myRef.current); // 输出 DOM 节点
  }, []);

  return <div ref={myRef} />;
}

转发 Refs

通过 React.forwardRef 可以将 Ref 自动传递给子组件。这在需要访问子组件的 DOM 节点时非常有用。

const FancyButton = React.forwardRef((props, ref) => (
  <button ref={ref} className="fancy-button">
    {props.children}
  </button>
));

class ParentComponent extends React.Component {
  constructor(props) {
    super(props);
    this.buttonRef = React.createRef();
  }

  componentDidMount() {
    console.log(this.buttonRef.current); // 输出 button DOM 节点
  }

  render() {
    return <FancyButton ref={this.buttonRef}>Click me!</FancyButton>;
  }
}

Refs 的使用场景

Refs 通常用于以下场景:

  • 管理焦点、文本选择或媒体播放
  • 触发强制动画
  • 集成第三方 DOM 库

注意事项

  • 避免过度使用 Refs,优先考虑使用 React 的数据流。
  • 不要在函数组件中使用 React.createRef(),而是使用 useRef Hook。
  • Refs 不会触发组件的重新渲染。

分享给朋友:

相关文章

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高 React Native 允许开发者使用 JavaScript 和 React 编写代码,同时生成 iOS 和 Android 应用,大幅减少开发成…

如何学react

如何学react

学习 React 的基础知识 React 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

react 如何继承

react 如何继承

在React中,组件继承并非推荐的设计模式(官方更推崇组合优于继承),但技术上仍可通过以下方式实现类似效果: 使用ES6类继承 通过extends关键字继承父组件类,子组件可访问父组件的生命周期方…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 进行组件记忆 React.memo 是一个高阶组件,用于缓存函数组件的渲染结果,避免不必要的重新渲染。只有当组件的 props 发生变化时,才…

react如何更新

react如何更新

更新 React 项目的方法 检查当前 React 版本 在项目根目录的 package.json 文件中查看 react 和 react-dom 的版本号。也可以通过命令行运行以下命令查看: np…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…