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

React Native使用react-native-image-picker关闭选图窗报assets[0]未定义如何解决

错误原因

用户取消图片选择操作时,react-native-image-picker返回的response对象中,assets属性会是undefined或者空数组,原有代码仅判断了response本身存在,未校验assets的有效性,因此访问response.assets[0]时会抛出类型错误。

修复方案

你需要补充对应空值校验逻辑,先判断操作是否为用户取消/报错,再校验assets数组是否存在有效选中项即可。

全兼容写法(适配无ES2020可选链支持的环境)

launchImageLibrary(options, (response) => {
  // 新增校验:存在错误码/无有效选中资源时直接终止
  if (response.errorCode || !response.assets || response.assets.length === 0 || !response.assets[0]) {
    return;
  }
  let base64 = response.assets[0].uri;
  dispatch({
    type: 'SET_PHOTO',
    payload: {
      photo: base64, photoNumber, photoType,
    }
  })
});

简化写法(适配支持可选链语法的环境)

launchImageLibrary(options, (response) => {
  const base64 = response?.assets?.[0]?.uri;
  // 确认取到有效资源地址再走后续逻辑
  if (!base64) return;
  dispatch({
    type: 'SET_PHOTO',
    payload: {
      photo: base64, photoNumber, photoType,
    }
  })
});
校验逻辑说明
  • response.errorCode有值时,代表操作触发了异常,常见值包括cancel(用户主动取消)、permission(权限拒绝),遇到这类情况不需要走后续业务逻辑
  • 校验response.assets是否存在且长度大于0,确保返回结果里有用户选中的资源
  • 额外判断第一个资源项是否存在,避免极端场景下的空值报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:04