跳转到内容

QRCode 二维码

生成具有可自定义外观、图标和状态的二维码。颜色自动适应明暗主题。

此组件需要 qrcode 作为对等依赖:

Terminal window
npm install qrcode
import { QRCode } from 'asterui/qrcode'

基础二维码

具有默认设置的简单二维码。

import { QRCode } from 'asterui'

function App() {
  return (
      <QRCode value="https://asterui.com" />
    )
}

export default App

自定义尺寸

不同的二维码尺寸。

import { QRCode } from 'asterui'

function App() {
  return (
      <div className="flex gap-4 items-center flex-wrap">
        <QRCode value="https://asterui.com" size={80} />
        <QRCode value="https://asterui.com" size={120} />
        <QRCode value="https://asterui.com" size={160} />
        <QRCode value="https://asterui.com" size={200} />
      </div>
    )
}

export default App

自定义颜色

自定义前景色。背景默认适应主题。

import { QRCode } from 'asterui'

function App() {
  return (
      <div className="flex gap-4 flex-wrap">
        <QRCode value="https://asterui.com" color="#3b82f6" />
        <QRCode value="https://asterui.com" color="#22c55e" />
        <QRCode value="https://asterui.com" color="#a855f7" />
      </div>
    )
}

export default App

带图标

带有居中徽标/图标的二维码。

import { QRCode } from 'asterui'

function App() {
  return (
      <QRCode
        value="https://asterui.com"
        icon="/logo.png"
        iconSize={34}
        errorLevel="H"
      />
    )
}

export default App

纠错级别

不同的纠错级别会影响二维码密度。

import { QRCode } from 'asterui'

function App() {
  return (
      <div className="flex gap-4 flex-wrap">
        <div className="text-center">
          <QRCode value="https://asterui.com/data" errorLevel="L" />
          <div className="text-sm mt-2">Level L (7%)</div>
        </div>
        <div className="text-center">
          <QRCode value="https://asterui.com/data" errorLevel="M" />
          <div className="text-sm mt-2">Level M (15%)</div>
        </div>
        <div className="text-center">
          <QRCode value="https://asterui.com/data" errorLevel="H" />
          <div className="text-sm mt-2">Level H (30%)</div>
        </div>
      </div>
    )
}

export default App

无边框

移除边框以实现无缝集成。

import { QRCode } from 'asterui'

function App() {
  return (
      <div className="flex gap-4 flex-wrap">
        <QRCode value="https://asterui.com" bordered />
        <QRCode value="https://asterui.com" bordered={false} />
      </div>
    )
}

export default App

加载状态

在生成或获取二维码数据时显示加载状态。

import { QRCode } from 'asterui'

function App() {
  return (
      <QRCode value="https://asterui.com" status="loading" />
    )
}

export default App

过期状态

显示过期状态及可选的刷新功能。

import { QRCode } from 'asterui'
import { useState } from 'react'

function App() {
  const [status, setStatus] = useState<'active' | 'loading' | 'expired'>('expired');
  
  const handleRefresh = () => {
    setStatus('loading');
    setTimeout(() => setStatus('active'), 2000);
  };
  
  return (
      <QRCode
        value="https://asterui.com"
        status={status}
        onRefresh={handleRefresh}
      />
    )
}

export default App

动态二维码

动态更新二维码值。

import { QRCode } from 'asterui'
import { useState } from 'react'

function App() {
  const [text, setText] = useState('https://asterui.com');
  
  return (
      <div className="flex flex-col gap-4 items-center">
        <QRCode value={text} />
        <input
          type="text"
          value={text}
          onChange={(e) => setText(e.target.value)}
          placeholder="Enter text or URL"
          className="input input-bordered w-full max-w-md"
        />
      </div>
    )
}

export default App
属性描述类型默认值
value要编码在二维码中的值string-
size二维码画布大小(像素)number160
errorLevel纠错级别'L' | 'M' | 'Q' | 'H''M'
icon要在中心显示的图标/徽标的 URLstring-
iconSize中心图标的大小(像素)number40
type渲染类型'canvas' | 'svg''canvas'
color前景色(二维码颜色)string主题感知
bgColor背景颜色string主题感知
bordered在二维码周围显示边框booleantrue
status二维码状态'active' | 'loading' | 'expired''active'
onRefresh点击刷新按钮时的回调(过期状态)() => void-
className额外的 CSS 类string-
data-testid用于测试的测试 IDstring-
  • 二维码包含带有描述性标签的 role="img"
  • 加载和过期状态会向屏幕阅读器宣布
  • 刷新按钮可通过键盘访问