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

点击按钮触发TypeError:data[imageIndex].img_testeo未定义问题求助

错误排查:TypeError: undefined is not an object (evaluating 'data[imageIndex].img_testeo')

这个错误的核心原因是数组索引越界:当imageIndex的值超出data数组的有效索引范围时,data[imageIndex]会返回undefined,此时访问它的img_testeo属性就会触发报错。

具体问题点

  1. 索引判断逻辑错误:在siguienteImagen函数中,判断条件if (imageIndex !== data.length)存在漏洞——数组的有效索引范围是0到data.length - 1,当imageIndex等于data.length - 1时,执行setImageIndex(imageIndex + 1)会让索引变成data.length,此时data[data.length]必然是undefined。
  2. 跳转时的冗余操作:navigateTo函数中调用了siguienteImagen,但用户点击“Finalizar”按钮是要结束流程跳转页面,此时没必要再递增图片索引,反而可能触发最后一次索引越界。
  3. 渲染时缺少安全校验:当前仅判断了data.length > 0,但未校验data[imageIndex]是否存在,一旦索引越界就会直接报错。

修复方案

1. 修正索引判断逻辑

将siguienteImagen中的判断条件改为仅当当前索引小于数组最大有效索引时,才递增索引:

function siguienteImagen(num_usuario) {
  enviarDatos(num_usuario)
  // 数组最大有效索引是 data.length - 1,确保递增后不越界
  if (imageIndex < data.length - 1) {
    setImageIndex(imageIndex + 1)
    setNumeroElegido(null)
    console.log(data.length, "length")
    console.log(imageIndex, "imageIndex")
  } else {
    // 已到最后一张图,可添加完成提示或直接跳转逻辑
    console.log("所有图片已浏览完毕")
  }
}

2. 移除跳转时的冗余操作

修改navigateTo函数,去掉调用siguienteImagen的逻辑:

function navigateTo(routeName){  
  navigation.navigate(routeName)
}

3. 增加渲染时的安全校验

在图片渲染前,额外判断data[imageIndex]是否存在:

data.length > 0 && data[imageIndex] &&
  <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
    <Image source={{ uri: `data:image/jpg;base64,${data[imageIndex].img_testeo}` }}
      style={{ width: 200, height: 200 }} />
  </View>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:24