【React Hooks 学习笔记】useRef

简介: 前端西瓜哥

大家好,我是前端西瓜哥。今天说说 React Hooks 的 useRef。

Refs,是关联引用的意思,是 React 提供的一种让我们可以访问 DOM 节点或 React 元素的一种机制。

类组件中使用 ref

类组件通过 creatRef 创建 ref,然后作为 DOM 元素或类组件的 ref 属性。当组件被渲染后,对应的 ref 就能通过属性 current 拿到 DOM 元素或组件实例。

需要注意的是,绑定的 React 元素必须为类组件,这样我们才能通过实例来获取熟悉或调用一些方法。如果是函数组件,就会报错,因为函数组件不提供实例对象。

我们看看下面的类函数使用 ref 的例子。

class MyComponent extends React.Component {
  constructor(props) {
    super(props);
    this.inputRef = React.createRef();
    this.componentRef = React.createRef();
  }
  componentDidMount() {
    console.log(this.inputRef.current);
    console.log(this.componentRef.current);
  }
  render() {
    return (
      <div>
        <input ref={this.inputRef} type="text" />
        {/* Button 为类组件 */}
        <Button ref={this.componentRef}></Button>
      </div>
    );
  }
}

控制台输出为:

image.png

函数组件中使用 ref

后来 React Hooks 带着它的 useRef 出现了,让我们也可以在组件函数使用 ref。

const myRef = useRef(null);

我们拿到一个 current 属性为 null 的 ref 对象。在之后的任意一次渲染,ref 对象都是指向的都是同一个对象。

上面的类组件示例,改成函数组件就是下面这样子的:

function TextInput() {
  const inputRef = useRef(null);
  const componentRef = useRef(null);
  useEffect(() => {
    console.log(inputRef.current);
    console.log(componentRef.current);
  }, [])
  return (
    <div>
      <input ref={inputRef} type="text" />
      {/* Button 为类组件 */}
      <Button ref={componentRef}></Button>
    </div>
  );
}

函数组件的 “实例属性”

其实你可以把函数组件的 ref 对象看作类似类组件实例属性的存在。于是函数组件的 ref 对象获得了全新的能力:模拟类组件实例属性。

如果你想在函数组件声明一个每次渲染都不改变的对象,且修改这个对象,不会引发组件的重新渲染,Refs 是很好的一个选择。

下面看一个使用 useRef 和 useEffect 简单实现类组件 ComponentDidUpdate

const isMounted = useRef(false);
useEffect(() => {
  if (!isMounted.current) return;
  console.log('更新');
  // 业务代码
});
useEffect(() => {
  console.log('挂载');
  isMounted.current = true;
}, []);

当然最好还是封装一下,做成自定义 hook 会更好些,你可以实现一下。

相关文章
|
2月前
|
前端开发 JavaScript 开发者
深入理解React Hooks:提升前端开发效率的关键
【10月更文挑战第5天】深入理解React Hooks:提升前端开发效率的关键
|
2月前
|
前端开发 JavaScript
React Hooks 全面解析
【10月更文挑战第11天】React Hooks 是 React 16.8 引入的新特性,允许在函数组件中使用状态和其他 React 特性,简化了状态管理和生命周期管理。本文从基础概念入手,详细介绍了 `useState` 和 `useEffect` 的用法,探讨了常见问题和易错点,并提供了代码示例。通过学习本文,你将更好地理解和使用 Hooks,提升开发效率。
70 4
|
2月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
2月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具
|
20天前
|
前端开发 JavaScript
深入探索React Hooks:从useState到useEffect
深入探索React Hooks:从useState到useEffect
|
2月前
|
XML 前端开发 JavaScript
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
这篇文章是React的学习笔记,覆盖了从React的基础用法到高级特性,包括组件化、状态管理、生命周期、虚拟DOM等主题,适合React初学者参考。
97 0
react学习笔记一:入门级小白到脚手架(create-react-app)开发项目
|
1月前
|
前端开发 JavaScript 开发者
“揭秘React Hooks的神秘面纱:如何掌握这些改变游戏规则的超能力以打造无敌前端应用”
【10月更文挑战第25天】React Hooks 自 2018 年推出以来,已成为 React 功能组件的重要组成部分。本文全面解析了 React Hooks 的核心概念,包括 `useState` 和 `useEffect` 的使用方法,并提供了最佳实践,如避免过度使用 Hooks、保持 Hooks 调用顺序一致、使用 `useReducer` 管理复杂状态逻辑、自定义 Hooks 封装复用逻辑等,帮助开发者更高效地使用 Hooks,构建健壮且易于维护的 React 应用。
32 2
|
2月前
|
前端开发 开发者
React 提供的其他重要 Hooks
【10月更文挑战第20天】React 提供了一系列强大的 Hooks,除了 `useRef` 之外,还有许多其他重要的 Hooks,它们共同构成了函数式组件开发的基础。
35 6
|
2月前
|
存储 缓存 JavaScript
深入理解 React-Hooks 之 useRef
【10月更文挑战第20天】总之,`useRef` 是 React-Hooks 中一个非常实用的工具,它为我们提供了一种灵活而强大的方式来处理组件中的各种数据和操作。通过深入理解和掌握 `useRef` 的原理和用法,我们能够更好地构建高效、稳定的 React 应用。
39 6
|
12天前
|
缓存 前端开发 开发者
深入理解React Hooks,打造高效响应式UI
深入理解React Hooks,打造高效响应式UI
22 0