点击按钮触发TypeError:data[imageIndex].img_testeo未定义问题求助
错误排查:TypeError: undefined is not an object (evaluating 'data[imageIndex].img_testeo')
这个错误的核心原因是数组索引越界:当imageIndex的值超出data数组的有效索引范围时,data[imageIndex]会返回undefined,此时访问它的img_testeo属性就会触发报错。
具体问题点
- 索引判断逻辑错误:在
siguienteImagen函数中,判断条件if (imageIndex !== data.length)存在漏洞——数组的有效索引范围是0到data.length - 1,当imageIndex等于data.length - 1时,执行setImageIndex(imageIndex + 1)会让索引变成data.length,此时data[data.length]必然是undefined。 - 跳转时的冗余操作:
navigateTo函数中调用了siguienteImagen,但用户点击“Finalizar”按钮是要结束流程跳转页面,此时没必要再递增图片索引,反而可能触发最后一次索引越界。 - 渲染时缺少安全校验:当前仅判断了
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
相关产品推荐
相关产品推荐

