跳到主要内容

快速上手

本页展示最小可运行示例,帮你在 5 分钟内完成第一次拍照。

真机验证

相机功能依赖原生摄像头,无法在模拟器中预览实际效果。请在真机上验证完整行为。


最小示例

import React from 'react';
import { View, Text } from 'react-native';
import { useCamera } from '@unif/react-native-camera';

const App = () => {
const [api, holder] = useCamera();

return (
<View>
<Text
onPress={async () => {
const res = await api.open({
cameraMode: [
{ mode: 'single', quality: 0.9 },
{ mode: 'continuous' },
],
dataRetainedMode: 'clear',
});
// res.code: 200=ok, 0=cancelled, 403=no_permission, 404=no_device, 500=capture_failed, 503=video_failed
if (res.code === 200) {
// res.data 是拍摄的文件列表(CustomPhotoFile[])
}
}}
>
打开相机
</Text>
{holder}
</View>
);
};

export default App;

逐行讲解

1. 初始化 hook

const [api, holder] = useCamera();

useCamera() 返回一个二元组:

  • apiCameraApi 对象,提供 open() / close() 方法,用于控制相机的打开和关闭。
  • holderReact.ReactElement,相机的 React 宿主节点,必须渲染进 React 树(见下方 {holder})。holder 是相机 UI 的挂载点,缺少它则相机无法显示。

2. 打开相机

const res = await api.open({
cameraMode: [
{ mode: 'single', quality: 0.9 },
{ mode: 'continuous' },
],
dataRetainedMode: 'clear',
});

api.open(config) 返回一个 Promise<CameraResult>,在用户完成拍摄并确认(或取消)后 resolve:

  • cameraMode:拍摄模式数组,至少一项。本例提供两项(单拍 + 连拍),相机底部会出现模式 tab 供用户切换。
    • mode: 'single' — 单次拍摄,quality: 0.9 设置 JPEG 压缩率(0~1)。
    • mode: 'continuous' — 连续拍摄多张。
  • dataRetainedMode: 'clear' — 用户切换拍摄模式时,清除已拍照片。改为 'retain' 则保留。

3. 处理返回结果

// res.code: 200=ok, 0=cancelled, 403=no_permission, 404=no_device, 500=capture_failed, 503=video_failed
if (res.code === 200) {
// res.data 是拍摄的文件列表(CustomPhotoFile[])
}

resCameraResult,根据 res.code 判断结果:

code含义
200用户完成拍摄并确认,res.data 包含文件列表
0用户取消(未拍或点击返回)
403没有相机权限
404没有可用摄像设备
500拍照失败
503录像失败

4. 渲染 holder

{holder}

holder 必须出现在 React 树中,这是相机 UI(全屏模态)的挂载宿主。位置不影响视觉——相机打开时会全屏覆盖,但节点必须存在,否则 api.open() 调用无效。


下一步