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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:27:02