MST

星途 面试题库

面试题:React useRef钩子在动画与DOM操作场景的优化

假设你要实现一个简单的动画效果,比如点击按钮后一个元素从隐藏到显示并伴有淡入动画。要求使用useRef钩子来操作DOM元素实现此动画效果。请阐述你实现过程中的思路,并且说明在频繁触发动画时,如何利用useRef进行性能优化。
27.7万 热度难度
前端开发React

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 创建 useRef 对象:使用 useRef 钩子创建一个用于引用 DOM 元素的 ref 对象,例如 const elementRef = useRef(null)
  2. 绑定 ref 到目标元素:在 JSX 中,将创建的 ref 绑定到需要进行动画操作的 DOM 元素上,如 <div ref={elementRef}>...</div>
  3. 处理按钮点击事件:为按钮添加点击事件处理函数。在函数内部,首先通过 elementRef.current 获取到实际的 DOM 元素。然后,通过修改该元素的 CSS 属性来实现淡入动画,比如设置 opacity 从 0 到 1,并设置合适的 transition 属性。同时,将元素的 display 属性从 none 改为其他合适的值(如 blockinline - block 等,取决于元素类型),以实现从隐藏到显示的效果。

性能优化(频繁触发动画时)

  1. 避免重复渲染useRef 不会触发组件重新渲染。当频繁触发动画时,如果使用 state 来控制动画状态,会导致组件多次渲染,影响性能。而 useRef 可以在不引起重新渲染的情况下保存和更新 DOM 元素的引用。
  2. 节流与防抖:结合 useRef 实现节流或防抖机制。可以使用一个 useRef 来记录上次动画触发的时间,在点击事件处理函数中,通过比较当前时间与上次时间来决定是否执行动画操作。例如实现节流时,只有当时间间隔大于某个设定值时才执行动画,从而避免短时间内频繁触发动画对性能的影响。