티스토리 뷰
728x90
반응형
import { useEffect, useRef, useState } from 'react';
import { BrowserMultiFormatReader, BarcodeFormat, DecodeHintType } from '@zxing/library';
const Reader = () => {
const [localStream, setLocalStream] = useState<MediaStream>();
const Camera = useRef<HTMLVideoElement>(null);
const hints = new Map();
const formats = [BarcodeFormat.QR_CODE, BarcodeFormat.DATA_MATRIX, BarcodeFormat.CODE_128, BarcodeFormat.CODABAR, BarcodeFormat.EAN_13, BarcodeFormat.EAN_8, BarcodeFormat.CODE_39, BarcodeFormat.CODE_93];
hints.set(DecodeHintType.POSSIBLE_FORMATS, formats);
const Scan = new BrowserMultiFormatReader(hints, 500);
useEffect(() => {
navigator.mediaDevices.getUserMedia({
video: { facingMode: "user" }, //전면
// video: { facingMode: { exact: "environment" } }, //후면
})
.then(stream => {
console.log(stream);
setLocalStream(stream);
})
return () => {
Stop();
}
}, []);
useEffect(() => {
if (!Camera.current)
return;
if (localStream && Camera.current) {
Scanning();
}
return () => {
Stop();
}
}, [localStream]);
const req = useRef<any>();
const Scanning = async () => {
// const t = await Scan.decodeOnce();
console.log('scan');
if (localStream && Camera.current) {
try {
const data = await Scan.decodeFromStream(localStream, Camera.current, (data, err) => {
if (data) {
setText(data.getText());
// Scan.stopContinuousDecode();
} else {
setText("");
}
});
} catch (error) {
console.log(error);
}
}
}
const Stop = () => {
if (localStream) {
const vidTrack = localStream.getVideoTracks();
vidTrack.forEach(track => {
localStream.removeTrack(track);
});
}
}
const [text, setText] = useState('')
return (
<div>
<video
ref={Camera}
id="video"
/>
<span>{text}</span>
</div>
);
};
export default Reader;
리액트에서 qrcode 및 바코드 리더를 활용하려고 보면 둘 중 하나만 되는 경우가 많다.
zxing는 둘 다 지원하는데, 현재 글쓴날짜 기준으로는 데모코드가 전혀 동작하지 않고,
구글링 해봐도 다 구형버전 예제코드라 동작이 되지 않는다.
결국 다소의 노가다 끝에 최신 버전에 맞는 코드를 작성할 수 있었고, 혹여나 삽질할 사람들을 위해 올려놓는다.
728x90
'프로그래밍 > React' 카테고리의 다른 글
react app(webpack, craco) -> vite로 변경하기 (0) | 2022.08.14 |
---|---|
useState 상태 업데이트의 2가지 방법. (0) | 2022.08.09 |
리액트 라우터에서 페이지 이동시마다 특정 이벤트 실행. (0) | 2021.09.17 |
React 카메라 on/off 문제 (0) | 2021.09.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- iframe
- 배포
- craco
- Rust
- HWP
- #노력만 가상한 글
- WASM
- #useState 특징
- #그래프
- API
- #업데이트가 이상하게 될떄
- KBL
- vscode
- ffmpeg
- 7위를 하는 이유
- JavaScript
- contributer
- #useState
- vtie
- 웹어셈블리
- 팀별 분석
- youtube
- contributor
- webassembly
- 마크다운
- 무관의 왕
- 노력만 가상한 글
- 티스토리API
- 그래프
- #팀별 분석
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함