美文网首页中年危机程序猿的日常
10分钟搞定react二维码、条码生成组件

10分钟搞定react二维码、条码生成组件

作者: 脱非入欧 | 来源:发表于2017-03-02 23:43 被阅读4525次

条码生成

首先去万能的 npm 上找到一个库安装。


npm install jsbarcode --save

然后写一个简单的 react 组件。需要转换成条码的原始字符串来源可能有很多,我们在这里就弄个输入框好了。

输入 => 转换 => SVG条形码

import React from 'react';
import JsBarcode from 'jsbarcode';

class CodePainterExample extends React.Component {
  constructor(props) {
    super(props);
  }

  render() {
    return (
      <div>
        <input type="text" placeholder="请输入原始字符串" 
          onChange={(e)=>{
            //  在 this._barcodeSVG 下使用输入的数值来生成条码
            JsBarcode(this._barcodeSVG, e.target.value, 
              {
                displayValue: false,  //  不显示原始值
                background: '#4b8b7f',  //  背景色
                lineColor: 'rgba(255,255,255,0.5)', // 线条颜色
                width: 1  // 线条宽度
              }
            );
          }}/>
        <br/>
        <label>条码</label><br/>
        <svg ref={(ref)=>this._barcodeSVG = ref}></svg>
      </div>
    );
  }
}

export default CodePainterExample;

二维码生成

一样在 npm 找到库 qr-image 安装。
npm install --save qr-image

同样,在上面的例子里加一个新的 svg 标签,来放我们的二维码。由于这个库主要是用在 nodejs 中,我们使用其中提供的 svgObject.path 来绘制二维码。

import svgpath from 'svgpath';
import qr from 'qr-image';
class CodePainterExample extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      path: null // 保存二维码SVG的path
    };
  }
  render() {
    return (
      <div>
        <input type="text" placeholder="请输入" 
          onChange={(e)=>{
            const originPath = qr.svgObject(e.target.value).path; //  获得二维码的绘制路径
            this.setState({path: originPath});
          }}/>
        <br/>
        <label>二维码</label><br/>
        <svg width="100%" height="300" ref={(ref)=>this._qrcodeSVG = ref} transform="scale(2)">
          <path d={this.state.path?this.state.path:null}/>
        </svg>
      </div>
    );
  }
}

这样生成的二维码图形意外的小,还得找个库来放大一下我们的二维码。
npm install --save svgpath
然后,试着放大一下我们的二维码。

const scaledPath = svgpath(originPath).scale(5, 5).toString();
this.setState({path: scaledPath});

完美。

相关文章

网友评论

  • 小情兽丶:请问有做过react识别二维码吗?
  • 林木酸瓜:如何把URL地址转化为二维码呢?
    脱非入欧:@林_c3af 刚看到,哈哈哈,url本身就是字符串。
  • 003e5f75e048:我这边想转成图片怎么处理呢
  • dadb96cc204c:您好,我想问一下如何固定生成二维码的大小
    脱非入欧:@饲养员_9261 很久没看这边 问题解决了吗
  • 53dcb6f2b218:qr.svgObject(e.target.value).path; qr在那定义?
    脱非入欧:@海谜 少写了一句import,抱歉。import qr from 'qr-image'

本文标题:10分钟搞定react二维码、条码生成组件

本文链接:https://www.haomeiwen.com/subject/eftlgttx.html