html5-qrcode with React
reactjs.org | Support Level
= Strong
Example of using mebjas/html5-qrcode in React project with example, source and demo.
React Plugin / Component
using html5-qrcode
How to build a We shall be using React's recommendation on Integrating with Other Libraries to create a plugin for React
.
Download the latest library
You can download this from Github release page or npm. And include this in index.html
.
<script src="html5-qrcode.min.js"></script>
Html5QrcodeScannerPlugin
Create a new component You can write a custom plugin like this (see src/Html5QrcodePlugin.jsx for reference)
// file = Html5QrcodePlugin.jsx
import { Html5QrcodeScanner } from "html5-qrcode";
import React from 'react';
const qrcodeRegionId = "html5qr-code-full-region";
class Html5QrcodePlugin extends React.Component {
render() {
return <div id={qrcodeRegionId} />;
}
componentWillUnmount() {
// TODO(mebjas): See if there is a better way to handle
// promise in `componentWillUnmount`.
this.html5QrcodeScanner.clear().catch(error => {
console.error("Failed to clear html5QrcodeScanner. ", error);
});
}
componentDidMount() {
// Creates the configuration object for Html5QrcodeScanner.
function createConfig(props) {
var config = {};
if (props.fps) {
config.fps = props.fps;
}
if (props.qrbox) {
config.qrbox = props.qrbox;
}
if (props.aspectRatio) {
config.aspectRatio = props.aspectRatio;
}
if (props.disableFlip !== undefined) {
config.disableFlip = props.disableFlip;
}
return config;
}
var config = createConfig(this.props);
var verbose = this.props.verbose === true;
// Suceess callback is required.
if (!(this.props.qrCodeSuccessCallback )) {
throw "qrCodeSuccessCallback is required callback.";
}
this.html5QrcodeScanner = new Html5QrcodeScanner(
qrcodeRegionId, config, verbose);
this.html5QrcodeScanner.render(
this.props.qrCodeSuccessCallback,
this.props.qrCodeErrorCallback);
}
};
export default Html5QrcodePlugin;
Use this new component in your React app
A very crude example would be to
class App extends React.Component {
constructor(props) {
super(props);
// This binding is necessary to make `this` work in the callback.
this.onNewScanResult = this.onNewScanResult.bind(this);
}
render() {
return (<div>
<h1>Html5Qrcode React example!</h1>
<Html5QrcodePlugin
fps={10}
qrbox={250}
disableFlip={false}
qrCodeSuccessCallback={this.onNewScanResult}/>
</div>);
}
onNewScanResult(decodedText, decodedResult) {
// Handle the result here.
}
);
Example implementation
You can find an example implementation at example.html.
Additional Contributors
Name | Profile |
---|---|
Andy Tenholder | @AndyTenholder |
Minhaz | @mebjas |
Credits
- scanapp.org - Free online barcode and qrcode scanner - scan directly on your web browser using camera or images saved on your device. Works well on smart phones as well as PC or Mac.