You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中useRef钩子操作DOM设置背景色失效问题

React useRef修改div背景色失败的问题解决

问题根源

  1. 未访问useRef的current属性:useRef返回的是一个包装对象,实际DOM元素存储在current属性中,直接使用cssNav.style会因为找不到DOM元素而失效。
  2. 未监听滚动事件:原代码的useEffect依赖为空数组,仅在组件挂载时执行一次,无法响应后续的滚动操作。

修正后的代码

import { useRef, useEffect } from 'react';

function YourComponent() {
  const cssNav = useRef();

  useEffect(() => {
    const handleScroll = () => {
      // 先判断current是否存在,避免null报错
      if (cssNav.current) {
        cssNav.current.style.backgroundColor = window.scrollY > 0 ? 'white' : '';
      }
    };

    // 监听window滚动事件
    window.addEventListener('scroll', handleScroll);

    // 组件卸载时移除监听,防止内存泄漏
    return () => window.removeEventListener('scroll', handleScroll);
  }, []);

  return (
    <div ref={cssNav} style={{ minHeight: '100vh', transition: 'background-color 0.3s' }}>
      滚动页面即可看到导航栏背景变化
    </div>
  );
}

export default YourComponent;

关键说明

  • 始终通过ref.current访问DOM元素,并且添加非空判断,避免组件初始化阶段current为null引发错误。
  • 必须监听scroll事件,才能在用户滚动页面时触发背景色更新逻辑。
  • 组件卸载时移除事件监听,这是React中处理全局事件的标准做法,防止内存泄漏。

内容的提问来源于stack exchange,提问作者Rave On Time

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 11:33:12