React Native Expo Camera拍照无法保存到Media Library报错求助
报错原因与修复方案
你触发报错的核心原因是未给Camera组件绑定实例引用,代码中使用的camera变量未定义,因此无法调用takePictureAsync方法,完整修复步骤如下:
- 1、在Cam组件中引入
useRef钩子,创建Camera实例的引用对象
import { useRef } from 'react'; function Cam() { // 新增Camera引用声明 const camera = useRef(null); // 原有其他代码 }
- 2、给Camera组件添加ref属性绑定引用
<Camera ref={camera} style={styles.camera} type={type} >
- 3、调整拍照方法的调用逻辑,从ref的current属性获取Camera实例,同时添加异常捕获避免Promise未处理报错
const takePicture = async () => { // 先校验实例存在再调用方法 if (!camera.current) return try { const photo = await camera.current.takePictureAsync() await MediaLibrary.saveToLibraryAsync(photo.uri) } catch (err) { console.log('操作失败:', err) } }
- 4、修复权限校验逻辑,原代码未判断相册权限的返回结果,需同时校验相机、相册两个权限都授权通过才能正常使用功能
useEffect(() => { (async () => { const { status: cameraPerm } = await Camera.requestPermissionsAsync(); const { status: mediaPerm } = await MediaLibrary.requestPermissionsAsync(); setHasPermission(cameraPerm === 'granted' && mediaPerm === 'granted'); })(); }, []);
额外注意:请确认你已经正确安装并导入了expo-camera、expo-media-library两个依赖包。
内容的提问来源于stack exchange,提问作者theanton205
相关产品推荐
相关产品推荐

