
React에서 카메라를 접근하려고 하는데 자꾸 Camera 모듈이 임포트되지 않았다는 오류가 떴다.
Camera refers to a value, but is being used as a type here. Did you mean 'typeof' Camera? 이런 오류였는데,

알고보니 Expo SDK 버전이 53 버전이어서 Camera는 더이상 권장되지 않는 컴포넌트라서 이런 오류가 뜨는 거였다.
그래서 앞서, 게시물처럼 CameraView 컴포넌트를 사용했다.
| 항목 | Camera | CameraView |
|---|---|---|
| 설명 | 오래된 클래스형 컴포넌트 | 최신 함수형 컴포넌트 |
| 도입 시기 | 오래전부터 존재함 | Expo SDK 49 이후 도입 |
| 사용 방식 | <Camera ref={...} /> + 클래스 기반 메서드 사용 | <CameraView ref={...} /> + 훅 기반 메서드 사용 |
| 추천 여부 | 더 이상 권장되지 않음 | 권장 |
| 장점 | 하위 호환용 | 더 직관적이고 최신 Expo 환경에 적합 |
| 샘플 메서드 | cameraRef.current.takePictureAsync() | cameraRef.current.takePictureAsync() |
| 특징 | 일부 메서드는 버그가 있음 | SDK 50 이상에서는 더 안정적 |
기존 Camera 컴포넌트는 다음과 같은 형식으로 사용되었다.
import { Camera } from 'expo-camera';
<Camera
ref={cameraRef}
style={{ flex: 1 }}
type="back"
/>
CameraView도 여기서 크게 차이나진 않는다.
import { CameraView } from 'expo-camera';
<CameraView
ref={cameraRef}
style={{ flex: 1 }}
facing="back"
/>
이렇게 import 해주는 컴포넌트를 CameraView로 바꿔주면 된다.
Expo SDK 50 이상을 쓰고 있다면 무조건 CameraView를 사용하는 것이 좋다.
Camera는 더 이상 유지보수되지 않을 수 있다.
CameraView는 최신 기능 (animateShutter, onCameraReady, facing, torch, HDR 등) 호환이 편리하다.