ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

VueUse useQRCode 深度指南:在 Vue 3 中响应式生成二维码

2026/10/6 1:53:09 拓冰建站 浏览量
VueUse useQRCode 深度指南:在 Vue 3 中响应式生成二维码 前端【免费下载链接】vueuseCollection of essential Vue Composition Utilities for Vue 3项目地址https://gitcode.com/gh_mirrors/vu/vueuse点击查看免费下载useQRCode是 VueUse 生态中vueuse/integrations包提供的集成函数它把第三方二维码生成库qrcode包装成响应式组合式 API让开发者可以用一行代码把任意文本变成 Base64 的 Data URL并随源数据自动更新。本文以仓库中的 useQRCode 文档 为骨架结合其 源码实现、演示组件 与包配置完整讲解安装、用法、参数与底层原理读完即可在 Vue 3 项目中直接落地使用。背景vueuse/integrations 与 useQRCode 的定位useQRCode属于 VueUse 的vueuse/integrations子包。根据 integrations README这个子包是 VueUse 的附加模块专门为常用第三方工具库提供集成包装integration wrapper同一包内还包含useAxios、useCookies、useSortable等函数。useQRCode的本质是一个对qrcode库的响应式封装底层生成二维码的算法与能力全部来自qrcode库而 VueUse 负责把它接进 Vue 3 的响应式体系。从 包导出声明 可以看到export * from ./useQRCode即useQRCode会随vueuse/integrations主入口一并导出同时 package.json 中单独配置了子路径导出./useQRCode: ./dist/useQRCode.js支持按需引入。安装qrcode是vueuse/integrations的可选 peer dependency。查看 package.json 的peerDependencies与peerDependenciesMeta可知qrcode: ^1.5被标记为optional: true意味着它不会随包自动安装需要你手动补充。npm i qrcode^1使用 pnpm 时则为pnpm add qrcode^1安装qrcode后还需要确保项目中已有vueuse/integrations本体npm i vueuse/integrations基本用法useQRCode接受一个文本参数字符串返回一个保存着二维码 Data URL 的ShallowRef。最小示例import { useQRCode } from vueuse/integrations/useQRCode // qrcode 是一个保存 data URL 字符串的 ref const qrcode useQRCode(text-to-encode)在模板中可以直接把返回的 ref 绑定到img的src上img :srcqrcode altQR Code /由于返回的是响应式 ref二维码图片会随着 Data URL 的更新自动刷新无需手动操作 DOM。响应式用法传入 ref / getteruseQRCode更实用的场景是传入一个ref或 getter 函数此时生成的二维码会跟随源数据实时变化import { useQRCode } from vueuse/integrations/useQRCode import { shallowRef } from vue const text shallowRef(text-to-encode) const qrcode useQRCode(text)配套模板即可实现输入即刷新二维码的交互input v-modeltext typetext / img :srcqrcode altQR Code /用户每修改一次输入框内容textref 变化useQRCode内部侦听源值并重新调用底层生成逻辑二维码图片立即更新。完整可运行的官方 Demo仓库中的 demo.vue 给出了带配置项的完整示例其中指定了errorCorrectionLevel: H最高纠错等级与margin: 3留白边距script setup langts import { useQRCode } from vueuse/integrations/useQRCode import { shallowRef } from vue const text shallowRef(https://vueuse.org) const qrcode useQRCode(text, { errorCorrectionLevel: H, margin: 3, }) /script template note Text content for QRCode /note input v-modeltext typetext img v-iftext classmt-6 mb-2 rounded border :srcqrcode altQR Code /templatev-iftext的写法也提示了一个细节当输入为空时useQRCode不会生成二维码详见下文源码分析因此用条件渲染避免显示空图片。options 配置参数说明useQRCode的第二个参数options类型为QRCode.QRCodeToDataURLOptions即直接透传给底层qrcode库toDataURL方法的配置对象。常用配置项包括参数含义说明errorCorrectionLevel纠错等级取值为L、M、Q、HH最高、生成的二维码最密集但容错最强部分遮挡仍可扫描默认通常为Mmargin二维码四周留白宽度模块数官方 demo 使用3width/height输出图片尺寸像素不传时由qrcode按版本与 scale 自动计算scale每个模块的像素倍数控制放大倍率color.dark/color.light前景色与背景色以十六进制字符串指定例如{ dark: #010599FF, light: #FFBF60FF }type输出图片格式如image/png、image/jpeg、image/webptoDataURL默认输出 PNG Data URL这些选项与qrcode库的toDataURLAPI 保持一致所有具体取值与默认值均遵循底层库的行为本文仓库证据为 demo 中对errorCorrectionLevel与margin的实际使用。源码级原理剖析来看 index.ts 的完整实现整个函数只有 30 行左右逻辑非常清晰import type { MaybeRefOrGetter } from vue import { isClient, toRef } from vueuse/shared import QRCode from qrcode import { shallowRef, watch } from vue export function useQRCode( text: MaybeRefOrGetterstring, options?: QRCode.QRCodeToDataURLOptions, ) { const src toRef(text) const result shallowRef() watch( src, async (value) { if (src.value isClient) result.value await QRCode.toDataURL(value, options) }, { immediate: true }, ) return result }核心机制可以拆成四点入参归一化toRef(text)来自vueuse/shared把string | Refstring | () string统一转换成Refstring。这就是为什么既可以传普通字符串、也可以传ref或 getter 函数。响应式侦听用watch侦听src并设置{ immediate: true }使函数在调用瞬间就执行一次生成逻辑首次拿到值即可渲染。空值与 SSR 保护if (src.value isClient)保证两件事——源文本为空字符串时跳过生成非浏览器环境SSR下不调用QRCode.toDataURL避免服务端无 DOM 环境下执行不必要的计算。这也是为什么 demo 里要用v-iftext兜底。异步生成与浅层响应底层QRCode.toDataURL返回 Promise因此 watch 回调是async的结果存入shallowRef而不是ref因为 Data URL 是字符串不需要深层响应式代理这样也避免了不必要的性能开销。从调用链上看useQRCode(text, options)→watch(src, async ...)→QRCode.toDataURL(value, options)→ 写入result。整个生成过程是异步的赋值发生在 Promise resolve 之后因此拿到返回值后图片的src需要绑定 ref 由 Vue 自动更新而不是立即同步可用。类型声明文档与源码中导出的类型签名如下/** * Wrapper for qrcode. * * param text * param options */ export declare function useQRCode( text: MaybeRefOrGetterstring, options?: QRCode.QRCodeToDataURLOptions, ): ShallowRefstring, stringMaybeRefOrGetterstring表示参数可以是普通字符串、Refstring或() string三种形式返回类型ShallowRefstring, string明确告知调用方拿到的是一个只保存字符串的浅层 ref。TypeScript 用户无需额外类型定义qrcode库的类型types/qrcode会随推导自动生效仓库的 devDependencies 中也包含types/qrcode。按需导入与 Tree-shaking 建议useQRCode的压缩后体积记录在 export-size.json 中约 306 B非常轻量。为了获得更好的 tree-shaking 效果integrations README 明确建议从子模块导入而非从主入口导入// 不推荐 import { useQRCode } from vueuse/integrations // 推荐 import { useQRCode } from vueuse/integrations/useQRCode子路径导入之所以可行正是因为 package.json 的exports字段单独声明了./useQRCode: ./dist/useQRCode.js这一映射打包工具可以据此精确命中模块。常见应用场景小结表单/链接生成器用户输入 URL 或文本实时预览二维码官方 demo 即此场景分享与支付码展示把业务数据如订单号、链接编码为二维码图片直接渲染需要统一样式的场景通过color、width、margin等 options 控制二维码视觉输出。需要留意的是useQRCode生成的是 Data URLBase64 图片适合直接在img :src中渲染若需要保存文件或上传图片可基于 Data URL 进一步转成 Blob/File但这不属于useQRCode本身的职责范围。相关资源源码实现packages/integrations/useQRCode/index.ts官方文档packages/integrations/useQRCode/index.md官方演示packages/integrations/useQRCode/demo.vue包导出与依赖配置packages/integrations/package.json集成包函数清单packages/integrations/README.md赞分享前端【免费下载链接】vueuseCollection of essential Vue Composition Utilities for Vue 3项目地址https://gitcode.com/gh_mirrors/vu/vueuse点击查看免费下载相关推荐VueUse useQRCode 指南在 Vue 3 中声明式生成响应式二维码VueUse useQRCode 指南在 Vue 3 中声明式生成响应式二维码 useQRCode 是 VueUse vueuse/integrations前端在 Airi 中使用 VueUse useQRCode响应式生成二维码的完整实战指南在 Airi 中使用 VueUse useQRCode响应式生成二维码的完整实战指南 导读 useQRCode 是 VueUse 生态中 vueuse/inAI 应用人工智能大模型数字人AI Agent语音前端后端桌面应用移动开发即时通讯3D渲染VueUse useShare 深度指南在 Vue 3 中响应式封装 Web Share APIVueUse useShare 深度指南在 Vue 3 中响应式封装 Web Share API 本文以 useShare/index.md https://前端上一篇Devika项目中Playwright浏览器自动化问题的分析与解决方案下一篇AltStore完全指南如何在未越狱iOS设备上实现应用自由创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考