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

React中数据获取过慢引发Cannot read properties of undefined错误求助

问题解决:React渲染时无法读取undefined的name属性

问题本质

你完全猜中了——组件首次渲染时,API请求还没完成,concerts初始是个空数组[],这时候concerts[1]就是undefined,强行访问.name自然会抛出Cannot read properties of undefined (reading 'name')错误。偶尔能成功是因为API请求碰巧在组件首次渲染结束前返回了,但这种情况完全不可控。

几种可行的解决办法

  • 条件渲染,确保数据存在再渲染
    先判断数组长度是否足够,再渲染对应内容:

    <h4>{concerts.length >= 2 ? concerts[1].name : '暂无演出信息'}</h4>
    

    或者用逻辑与短路求值:

    <h4>{concerts.length >= 2 && concerts[1].name}</h4>
    
  • 使用可选链操作符(推荐)
    ES2020及以上支持的可选链?.,会自动判断前面的对象是否存在,不存在就返回undefined,不会报错,还能加默认值优化体验:

    <h4>{concerts[1]?.name || '暂无演出信息'}</h4>
    
  • 添加加载状态提示
    在数据未加载完成时显示加载提示,避免页面空白或报错:

    export const ConcertNewest = () => {
      const [concerts, setConcerts] = useState([]);
      useEffect(() => {
        const loadConcerts = async () => {
          const response = await axios.get("/data/concerts");
          setConcerts(response.data);
        };
        loadConcerts();
      }, []);
    
      // 数据未加载完时显示加载中
      if (concerts.length === 0) {
        return <div>加载演出信息中...</div>;
      }
    
      return (
        <div> {/* 注意:<show>不是合法的HTML/React标签,建议换成div */}
          <h1>Newest concerts </h1>
          <div>
            <div className="card">
              <img src="" style={{ width: 100 }} />
              <div className="card-text">
                <h4>{concerts[1]?.name}</h4>
              </div>
            </div>
          </div>
        </div>
      );
    };
    

额外提醒

你的代码里用了<show>标签,这不是标准的HTML或React内置标签,建议换成<div>或其他合法标签,避免潜在的渲染问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:06:06