Expo-Camera报错求助:TypeError: 无法访问_expoCamera.CameraType.back
解决Expo Camera报错:TypeError: undefined is not an object (evaluating '_expoCamera.CameraType.back')
可能的原因及修复方案
1. 调整CameraType的导入与使用方式
在expo-camera 12.3.0版本中,CameraType并非独立导出项,而是挂载在Camera对象下。修改代码如下:
- 替换导入语句:
import { Camera } from 'expo-camera';
- 所有用到
CameraType的地方改为Camera.CameraType:
const [type, setType] = useState(Camera.CameraType.back); function toggleCameraType() { setType((current) => ( current === Camera.CameraType.back ? Camera.CameraType.front : Camera.CameraType.back )); }
2. 确保Expo SDK与expo-camera版本兼容
expo-camera版本必须和项目Expo SDK版本匹配。检查package.json中的版本对应关系,执行命令同步兼容版本:
expo install expo-camera@12.3.0
3. 清除缓存并重启项目
Expo Go缓存可能导致模块加载异常:
- 彻底关闭并清除Expo Go后台进程
- 终端执行命令强制清除项目缓存后重启:
expo start -c
4. 优化组件挂载逻辑(适配navigation跳转场景)
通过navigation.navigate跳转时,将权限请求放在useEffect中初始化,避免初始渲染时权限状态未定义:
import { Camera } from 'expo-camera'; import { useState, useEffect } from 'react'; // 其他导入保持不变 export default function CameraScreen() { const [type, setType] = useState(Camera.CameraType.back); const [permission, setPermission] = useState(null); const [requestPermission] = Camera.useCameraPermissions(); useEffect(() => { requestPermission().then(res => setPermission(res)); }, []); if (!permission) { return <View />; } // 后续权限判断、相机渲染逻辑保持不变 }
内容的提问来源于stack exchange,提问作者EJ Navarro
相关产品推荐
相关产品推荐

