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

React运行报TypeError: Cannot read 'getBoundingClientRect' of undefined 如何解决

报错原因

TypeError: Cannot read properties of undefined (reading 'getBoundingClientRect') 报错的核心原因是你在React组件DOM还未完成挂载的阶段,就调用了还未初始化的ref的current属性。

你代码中ref绑定的<Card.ArrowSliderLeft>组件,在组件首次执行渲染逻辑时还没有被挂载到DOM树上,此时ref.current的初始值为undefined,直接同步读取ref.current.getBoundingClientRect()自然会抛出属性读取错误。

修复方案
  • 首先将获取DOM节点属性的逻辑迁移到useEffect钩子中,useEffect回调会在DOM挂载完成后执行,此时ref.current已经完成赋值,同时增加可选链判空逻辑避免边界异常:
import React,{useRef,useState, useEffect} from 'react';
import { Card } from '../components';
import { CardItemContainer } from './card-item';

export function CardContainer() 
 {
  const ref = useRef();
  const [scroll,setScroll] = useState('left')

  // 挂载完成后再读取DOM属性
  useEffect(() => {
    // 可选链判空避免异常
    const distance = ref.current?.getBoundingClientRect().x - 50; 
    // 此处添加你需要使用distance的业务逻辑
  }, [])

  return(
    <Card>
        <Card.ListTitle> Continue to watch</Card.ListTitle>
        <Card.Wrapper>
            <Card.ArrowSliderLeft setScroll={setScroll}  ref={ref}/>
            <Card.List scroll={scroll}  >
              <CardItemContainer/>
              <CardItemContainer/>
              <CardItemContainer/>
            </Card.List>
            <Card.ArrowSliderRight setScroll={setScroll} />
        </Card.Wrapper>
    </Card>
  )
}
  • 如果<Card.ArrowSliderLeft>是你自定义的React函数组件,需要用React.forwardRef包裹该组件,将ref转发到组件内部真实的DOM节点上,否则ref只会拿到组件实例,无法读取DOM的getBoundingClientRect方法。

内容的提问来源于stack exchange,提问作者Anthony U

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:15:04