2020-04-03 react native 生成二維碼

最近RN項(xiàng)目有生成二維碼的需求,百度了一下,一些文章推薦的主要有
react-native-qrcode-svgreact-native-qrcode,我們來分析一下。

react-native-qrcode-svg

react-native-qrcode-svg 是基于node-qrcodereact-native-svg

  • node-qrcode 是純js實(shí)現(xiàn)的生成二維碼的庫
  • react-native-svg 是有原生依賴的讓rn支持svg的庫
    原理:
    1、先使用node-qrcodecreate方法生成如下的對(duì)象,
    image.png

    2、將生成的對(duì)象的modules.data生成svg的path
    3、將path繪制到react-native-svg上,并且可以加上logo,就得到了二維碼了

react-native-qrcode

react-native-qrcode是基于 qr.js 和rn自帶的WebView(而目前高版本的RN,自帶WebView已經(jīng)從RN中移除了,需要使用community版本的WebView),原理是利用web端的canvas繪制二維碼,再用WebView展示,這里不建議使用這個(gè)庫


show magic

可以看到前者太重了(依賴react-native-svg,有原生依賴),后者太老了(包括qr.js也是很多年沒維護(hù)),那么有沒有更簡(jiǎn)單的方法實(shí)現(xiàn)二維碼呢?

其實(shí)有一個(gè)純js的庫qrcode-generator 提供了生成base64二維碼圖片的功能,然后直接用react nativeImage組件加載base64圖片就可以了。
示例:

import React, { useState, useEffect } from 'react';
import { Image } from 'react-native';
import QRCode from 'qrcode-generator';

export default ({text, style}) => {
  const [base64Img, setBase64Img] = useState(undefined);
  useEffect(() => {
    const typeNumber = 4;
    const errorCorrectionLevel = 'L';
    const qr = QRCode(typeNumber, errorCorrectionLevel);
    qr.addData(text);
    qr.make();
    setBase64Img(qr.createDataURL());
  }, [text]);
  return (
    base64Img ?
      <Image source={{ uri: base64Img }} style={style} resizeMode="contain"/>
      :
      null
  );
};


使用

<CustomQrCode  text='hello world' style={{width: 50, height: 50}} />
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容