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

React/Next.js中如何判断数组是否为空再执行遍历?

解决方案

首先,你的初始状态中students.data被设为字符串'',但接口返回的是数组类型,这会导致初始阶段调用map时直接报错(字符串没有map方法)。先修正初始状态:

const [students, setStudents] = useState({
  data: [], // 改为空数组,和接口返回类型保持一致
  loading: true
})

接下来,通过条件渲染实现“仅当数组有数据时才执行遍历”的需求,同时结合loading状态优化用户体验:

方式1:基础条件判断

直接判断students.data的长度,大于0时再渲染列表:

{!students.loading && students.data.length > 0 ? (
  students.data.map((caseStudy) => (
    <a key={caseStudy.id}>{caseStudy.title}</a> // 必须添加唯一key,满足React列表渲染要求
  ))
) : !students.loading ? (
  <p>暂无学生数据</p> // 数组为空时显示提示文本
) : (
  <p>加载中...</p> // 加载状态时的提示
)}

方式2:简化判断(可选链+空值合并)

利用ES6的可选链操作符?.和空值合并操作符??简化代码:

{!students.loading && (
  students.data?.map((caseStudy) => (
    <a key={caseStudy.id}>{caseStudy.title}</a>
  )) ?? <p>暂无学生数据</p>
)}
{students.loading && <p>加载中...</p>}

额外建议:避免直接操作DOM

你代码中用了$("#mostviews").hide();,在React中更推荐用状态控制元素显示,比如:

const [showMostViews, setShowMostViews] = useState(true);

const handleClick2 = async() => {
  setShowMostViews(false); // 用状态控制隐藏,替代jQuery直接操作DOM
  const response = await axios.get(`https://xxxxxxxxxxxxxx.com/${spath}`);
  setStudents({
    data: response.data,
    loading: false
  });
}

// 渲染时用条件判断控制元素显示
{showMostViews && <div id="mostviews">...</div>}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:01:01