面试题答案
一键面试实现思路
- 创建
useRef
对象:使用useRef
钩子创建一个用于引用 DOM 元素的ref
对象,例如const elementRef = useRef(null)
。 - 绑定
ref
到目标元素:在 JSX 中,将创建的ref
绑定到需要进行动画操作的 DOM 元素上,如<div ref={elementRef}>...</div>
。 - 处理按钮点击事件:为按钮添加点击事件处理函数。在函数内部,首先通过
elementRef.current
获取到实际的 DOM 元素。然后,通过修改该元素的 CSS 属性来实现淡入动画,比如设置opacity
从 0 到 1,并设置合适的transition
属性。同时,将元素的display
属性从none
改为其他合适的值(如block
或inline - block
等,取决于元素类型),以实现从隐藏到显示的效果。
性能优化(频繁触发动画时)
- 避免重复渲染:
useRef
不会触发组件重新渲染。当频繁触发动画时,如果使用state
来控制动画状态,会导致组件多次渲染,影响性能。而useRef
可以在不引起重新渲染的情况下保存和更新 DOM 元素的引用。 - 节流与防抖:结合
useRef
实现节流或防抖机制。可以使用一个useRef
来记录上次动画触发的时间,在点击事件处理函数中,通过比较当前时间与上次时间来决定是否执行动画操作。例如实现节流时,只有当时间间隔大于某个设定值时才执行动画,从而避免短时间内频繁触发动画对性能的影响。