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
相关产品推荐
相关产品推荐

