1. 安装qrcode.react插件
yarn add qrcode.react// ornpm install qrcode.react --save
2. 使用qrcode.react插件生成二维码
引入
import QRCode from 'qrcode.react';
使用
<QRCodeid="qrCode"value="https://www.jianshu.com/u/992656e8a8a6"size={200} // 二维码的大小fgColor="#000000" // 二维码的颜色style={{ margin: 'auto' }}imageSettings={{ // 二维码中间的logo图片src: 'logoUrl',height: 100,width: 100,excavate: true, // 中间图片所在的位置是否镂空}}/>
下载
<Button type="link" onClick={this.ClickDownLoad}>下载二维码</Button>
ClickDownLoad = (codeid, e) => {const canvasImg = document.getElementById('qrcode');console.log(canvasImg, 'canvasImg');console.log(canvasImg.toDataURL('image/png'), 'canvasImg.toDataURL');// const canvasImg = document.getElementById('qrCode'); // 获取canvas类型的二维码// const img = new Image();const url = canvasImg.toDataURL('image/png'); // 将canvas对象转换为图片的data urlthis.downloadFile('测试.png', url);};//下载downloadFile = (fileName, content) => {let aLink = document.createElement('a');let blob = this.base64ToBlob(content); //new Blob([content]);let evt = document.createEvent('HTMLEvents');evt.initEvent('click', true, true); //initEvent 不加后两个参数在FF下会报错 事件类型,是否冒泡,是否阻止浏览器的默认行为aLink.download = fileName;aLink.href = URL.createObjectURL(blob);// aLink.dispatchEvent(evt);//aLink.click()aLink.dispatchEvent(new MouseEvent('click', {bubbles: true, cancelable: true, view: window})); //兼容火狐};//base64转blobbase64ToBlob = code => {let parts = code.split(';base64,');let contentType = parts[0].split(':')[1];let raw = window.atob(parts[1]);let rawLength = raw.length;let uInt8Array = new Uint8Array(rawLength);for (let i = 0; i < rawLength; ++i) {uInt8Array[i] = raw.charCodeAt(i);}return new Blob([uInt8Array], {type: contentType});};
