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

如何避免数据获取前出现undefined?Mongo数据查询报错修复指南

问题:访问Mongo查询数据时出现"Cannot read properties of undefined"错误

我从Mongo获取数据,成功获取前,和useState([])相关的变量出现undefined。当尝试访问teamX[0].name时触发如下错误:

Unhandled Runtime Error
TypeError: Cannot read properties of undefined (reading 'name')

我的代码实现如下:

const router = useRouter()
const {id} = router.query
console.log(id)               // first undefined then team

const [teams, setTeams] = useState([])

const teamX = []

if(id === 'team') {
  const x = teams.find(item => item._id === '64501115948ae9070cdd5ba5') 
  teamX.push(x)
}

console.log(teamX)         // first [] then [{...}]
 
const fetchData = async () => {
  try {
    const { data } = await axios('/api/getTeam/data')
    console.log(data)        // (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
    setTeams(data)
  } catch (error) {
    console.log(error)
  }
}
 
useEffect(() => {
  fetchData()
}, [])

控制台输出如下:

undefined   // console.log(id)
[]          // console.log(teamX)
team        // console.log(id)
[undefined] // console.log(teamX)
(8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
team        // console.log(id)
[{…}]       // console.log(teamX)

修复方案

问题核心是组件初始化阶段,id未就绪、teams为空数组,导致teamX存入undefined,后续访问teamX[0].name时触发报错。可以通过以下步骤解决:

1. 给teamX的生成逻辑加空值校验

确保只有在id有效且teams有数据时,才执行查找操作,避免存入undefined:

const teamX = []
if(id === 'team' && teams.length > 0) {
  const x = teams.find(item => item._id === '64501115948ae9070cdd5ba5') 
  if(x) { // 找到匹配数据再push
    teamX.push(x)
  }
}

2. 访问teamX[0].name前做兜底处理

在需要使用该值的地方,通过以下方式避免报错:

  • 可选链+默认值:
{teamX[0]?.name || '加载中...'}
  • 条件渲染:
{teamX.length > 0 ? teamX[0].name : '加载中...'}

3. 优化数据加载时机(可选)

把id加入useEffect的依赖数组,确保id存在后再发起请求,减少无效渲染:

useEffect(() => {
  if(id) {
    fetchData()
  }
}, [id])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:12:36