Kbone原理解析

【技术分享】如何用Kbone进行小程序开发? 在 Kbone 框架中,实现了一个 Web 端的适配器,使基于 Web 端开发的程序能运行在微信小程序中,一套代码实现微信小程序和 Web 端同构。 阅读详情

Kbone原理解析

官方介绍

Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。

Web框架的基本原理

首先我们来看下普通Web端框架,以Vue框架为例,一份Vue模板对应一个组件,在代码构建阶段编译成调用Dom接口的JS函数,执行此JS函数就会创建出组件对应的Dom树,从而渲染到浏览器页面上。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zc4aM49z-1611037790632)(https://s3.ax1x.com/2021/01/13/sNoGkj.png)]
然而小程序是单线程,没有DOM树的概念,逻辑层和视图层是完全分离的,逻辑层是一个纯粹的JSCore,开发者可以编成JS脚本,但是无法直接调用Dom/Bom的api,没有任何浏览器相关的实现。在小程序中,视图层和逻辑层进行交互是通过数据和时间驱动的。因此,要实现跨端同构,问题是:怎么将web端代码转为小程序?

业界常见的做法

目前业界就行的第三方框架,常规做法都是:静态编译兼容。
sNTba4.png
原理是把代码语法分析一遍,然后将其中的模板部分翻译成对应的跨端需求的模板(微信小程序、支付宝小程序、H5、APP等)。

静态编译最大的局限性是无法保证转换的完整性,因为Vue模板和WXML模板的语法并不是直接对等的,Vue的特性设计也和小程序的设计无法划等号,这自然就导致了部分Vue特性的丢失。

比如像Vue中的v-html指令、ref获取Dom节点、过滤器等就通通用不了。

除了Vue自身的特性外,一些原本依赖Dom/Bom接口的Vue插件页无法使用,例如Vue-Router

Kbone的做法

Kbone是通过提供适配器方式来实现同构的,即运行时兼容,而非静态编译。

Kbone适配器核心包含两个部分:

miniprogram-render: 仿造Dom/Bom接口,构造仿造Dom树;

miniprogram-element: 监听仿造Dom树变化,渲染到页面,同时监听用户行为,触发事件。

仿造Dom树和浏览器的运行时对比:

仿造Dom树

利用内置组件和自定义组件进行递归,创建组件树。
如图,自定义custom-dom为递归自引用组件:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZGxXB30-1611037790635)(https://s3.ax1x.com/2021/01/14/sdAjqf.png)]
递归的终止条件是遇到特殊的节点,文本节点或者children节点
在创建组件树后,将Dom节点和自定义实例进行绑定,以便后续的Dom更新和操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iRbVxfsW-1611037790637)(https://s3.ax1x.com/2021/01/14/sdbSYD.png)]

kbone在这里也会对节点树进行优化:

如果一个dom节点对应一个自定义组件的话,就会创建很多自定义组件,这样会很浪费开销,这里做了子树的合并,也就是说3层才创建一个自定义组件,节省开销。

优化前:17个dom=17个自定义组件;优化后:17个dom=4个自定义组件,蓝色就是单节点,会合并到上面的树;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5p8Ss0Oh-1611037790638)(https://s3.ax1x.com/2021/01/14/sdbfcd.png)]

dom 子树作为自定义组件渲染的层级数是可以通过配置传入,理论上层级越多,使用自定义组件数量越少,性能也就越好。

一棵很大的 Dom 树,一次性 setData 到视图层,可能会超过 setData 的大小限制(1024kB),拆分成多棵子 Dom 树,然后分批的 setData 到视图层,可以节省开销。

事件监听

小程序的事件是视图层到逻辑层的通讯方式,事件绑定在组件上,当被触发时,就会执行逻辑层中对应的事件处理函数。

小程序的捕获冒泡是在视图层view端,因此逻辑层在整个捕获冒泡流程中各个节点接收到的事件不是同一个对象,小程序事件的捕获冒泡和阻止冒泡等操作必须在WXML模板中生命,无法使用接口实现。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lox3iFT-1611037790639)(https://s3.ax1x.com/2021/01/14/sdbb4S.png)]

为了能够让web端和小程序端的事件系统行为一致,kbone除了仿造了一份Dom树外,也把整个事件系统仿造了一份,即在仿造Dom树上进行捕获冒泡。

当自定义组件监听到用户的操作后,就将事件发往仿造Dom树,后续自定义组件监听到的同一个事件的冒泡就直接忽略。

当触发改节点,仿造Dom树接收到事件后,再进行捕获和冒泡,让事件在各个节点触发。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hGagvL1V-1611037790640)(https://s3.ax1x.com/2021/01/14/sdbXcj.png)]

Kbone的优势

  • 支持多个前端框架:Vue、React、Preact 等
  • 支持更为完整的前端框架特性: Vue 中的 v-html 指令、Vue-router 插件等
  • 提供了常用的 dom/bom 接口
  • 可以使用小程序本身的特性: live-player 内置组件、分包功能等
  • 提供一些 Dom 扩展接口:getComputedStyle 接口等

Kbone实践

脚手架cli

官方已经提供了kbone-cli可以用来快速开发:
用npm全局安装kbone-cli

sdqZuR.png

可以根据自己的技术栈选择不同的开发模板:React/Vue/Omi/Preact

sdquE6.png

然后就可以愉快的进行开发啦~

sdqKUK.png
生成的demo项目结构如下:
sdqKUK.png

demo中包含了多页跳转、vue-router、vuex等的使用示例,以及mp-webpack-plugin的配置示例。

对于多页面的应用,在 Web 端可以直接通过 a 标签或者 location 对象进行跳转,但是在小程序中则行不通。同时 Web 端的页面 url 实现和小程序页面路由也是完全不一样的。

Demo示例对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baKSlpMO-1611037790647)(https://s3.ax1x.com/2021/01/14/sdqB8g.png)]

其中,有一部分两端差异的业务逻辑功能,也给出了3中不同的解决方案:

利用vue-improve-loader,在构建时对dom树节点进行删减,在需要提出的节点加上check-reduce属性 利用reduce-loader,将业务中不需要被打包的代码进行去除,使用行内loader和环境变量来判断 使用样式隐藏,即设置不需要显示的节点样式为 display:none

其他问题

在实际开发中,还会碰到一些细节,例如:

  • 多页面开发:修改webpack和mp-webpack-plugin配置
  • 小程序内置组件: 部分用html标签代替,其他用wx-component + behavior标签
  • 小程序自定义组件:修改mp-webpack-plugin配置,补充wxCustomCom- ponents字段,将自定义组件放入组件根目录,使用自定义组件
  • 自定义app.js和app.wxss:监听app的生命周期,修改webpack配置补充app.js的构建入口,修改插件配置的generate.app字段,补充app.js
  • 扩展dom/bom对象和API:使用 window.$$extend追加方法
  • 代码优化:用reduce-loader做体积精简,dom树精简用vue-improve-loader
  • 区分环境实现不同功能:process.env.isMiniprogram

更新迭代

kbone由于目前在快速发展期,更新迭代非常迅速,以下特性是对比了8月份的版本和11月份版本,可以看出已经解决了近2/3的问题。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i31fqb0Q-1611037790649)(https://s3.ax1x.com/2021/01/14/sdq4GF.png)]

小程序技术选型

详细了解了kbone之后,我们来分析下小程序技术框架到底应该怎么选?
kbone & 小程序原生

  • 已有web版,需要小程序版:kbone
  • 跨平台需求(web + 小程序):kbone
  • 对性能特别苛刻 or 追求稳定 or 要用最新功能:小程序原生
  • 页面节点数量特别多( 1000 节点以上),且对渲染性能要求高:静态模板转义方案(第三方框架:mpvue/taro等)

第三方框架

  • MpVue :不推荐再用了,坑越来越多,内部也表示之后不会投入太多维护
  • WePY 1.7.x :不推荐再用了:1.7.x 的版本在最初的设计上的缺陷导致遗留了很多比较严重的问题
  • 2.0:现在还是 alpha 阶段,内外部有一些小程序在跑,体验和反馈还可以。但依然 issue 比较多。害怕踩坑的也不推荐使用
  • Taro: 也还是有不少问题,但相对来说应该是比 mpVue 和 WePY 更稳定一点
  • Uni-app:mpvue的衍生版,跨端 (官方示例有6端) 支持的很好,在H5端实现了一套微信模拟器,可以尝试,是目前唯一支持app端的商用方案,有独立的编辑器HBuildX
  • Chameleon: 统一的多态协议,渐进式跨端,提供脚手架命令工具,规划比较宏大
  • Omi :基于Taro完成的框架,kbone有支持omi的模板
  • Nanachi: 基于react的编译期间的转义框架

总结

没有跨端需求,只需要微信小程序 ==> 小程序原生
web端转小程序 or 两端 or 想要尝鲜 ==> kbone

多端 or Vue 技术栈 ==> uni-app

多端 or React 技术栈 ==> taro

不介意学习新技术栈 ==> wepy 2.0 or chaemeleon

写在最后

小程序在非常快速的更新迭代,就算是原生框架也还是有一些坑的,因此没有哪种框架是百分之百完美,需要根据业务具体需求以及自身技术栈偏好来进行选择。

最后呢提醒大家一句,小程序的生态比较庞大,大家在开发项目的时候一定要选好技术方向,不同的业务需求选择不同的技术可以规避一些没有必要的bug,同时第三方框架并不是银弹,他只是在不同时代业务而产生的解决方案,不要一味认为第三方框架可以解决小程序开发所带来的所有痛点。

实战!在 AMD RX 9070 XT (16G) 上使用原生 Windows ROCm 7.1 部署 ComfyUI + Z-Image-Turbo 本文详细介绍了如何在Windows系统下为AMD Radeon RX 9070 XT显卡配置Z-Image-Turbo AI绘图环境。主要内容包括:安装VS Build Tools和最新显卡驱动,配置Conda Python 3.12环境,安装ROCm 7.1.1 SDK及PyTorch适配版本,部署ComfyUI可视化界面。重点解决了AMD显卡在AI绘图中的适配问题,通过--use-split-cross-attention参数优化显存使用,最终成功搭建了可在消费级16G显存设备上运行的AI绘图环境 阅读详情

相关推荐

5种主流触觉传感器对比:GelSight、DIGIT、Taxim、GelSlim和TACTO怎么选?

本文深度对比了GelSight、DIGIT、Taxim、GelSlim和TACTO五种主流触觉传感器的技术原理与应用场景。针对机器人及VR项目的选型需求,文章从光学与电子传感的技术分野出发,分析了各传感器在分辨率、响应速度、集成难度和成本上的核心差异,并提供了从需求出发的实战选型决策框架,帮助开发者找到最适合的触觉解决方案。

weixin_29268637的博客 693

好程序员web前端培训分享kbone高级-事件系统

好程序员web前端培训分享kbone高级-事件系统:1、用法,对于多页面的应用,在 Web 端可以直接通过 a 标签或者 location 对象进行跳转,但是在小程序中则行不通;同时 Web 端的页面 url 实现和小程序页面路由也是完全不一样的,因此对于多页开发最大的难点在于如何进行页面跳转。 1.1 修改 webpack 配置   对于多页应用,此处和 Web 端一致,有多少个页面就需要配置多少个入口文件。如下例子,这个应用中包含 page1、page2 和 page2 三个页面: // webpack

qq_35970166的博客 358

Aspice的理解

ASPICE 是由汽车行业的主要公司和组织合作开发的,包括德国汽车工业联合会(VDA)和国际汽车工作组(Automotive SIG)。其目标是通过标准化的软件开发流程,提高汽车电子系统的软件质量和可靠性。

hkj8808的博客 2013

微信小程序开发之——kbone-介绍

一 概述 kbone 是一个致力于微信小程序和 Web 端同构的解决方案 kbone实现了一个适配器,在适配器里模拟出了浏览器环境,让Web端的代码可以不做什么改动便运行在小程序里 kbone可开发React、Vue、kbone-ui、Omi、Preact技术栈的小程序或Web 二 kbone的优势 大部分流行的前端框架都能够在 kbone 上运行,比如 Vue、React、Preact 等。 支持更为完整的前端框架特性,因为 kbone 不会对框架底层进行删改(比如 Vue 中的 v-html 指

我的博客 1684

ZEMAX优化方法---【Zemax学习】

在光学系统自动设计中,优化设计是光学设计中的重要阶段,也是ZEMAX软件的核心功能,涉及评价函数、权因子、阻尼因子等重要概念。在常用的阻尼最小二乘法优化设计的基础上,ZEMAX给我们提供了三种优化选择:Optimization(局部优化)、Global Search(全局优化)和 Hammer Optimization(锤形优化)。

yh的博客 4447

Stata森林图进阶:个性化定制与高级技巧

本文详细介绍了Stata森林图的进阶技巧,包括个性化定制与高级应用。通过meta分析工具如metan命令,用户可以优化字体、颜色、坐标轴等视觉元素,提升森林图的专业性和可读性。文章还提供了黑白印刷设置、高分辨率导出等实用技巧,帮助科研人员制作符合学术出版要求的森林图。

ios99的博客 254

kbone 基础——6Kbone + React 项目手工搭建流程

1、搭建 webpack 环境 在本地手工搭建一个 webpack 环境。在任意目录下执行以下命令: // 创建项目目录 mkdir kbone-react-project // 生成 Node 包管理配置文件 cd kbone-react-project npm init -y // 安装 webpack, webpack-cli npm install webpack webpack-cli --save-dev 2、编写 webpack 配置 2.1 webpack.mp.config.

qianfeng_dashuju的博客 373

Vivado报错-4 [Routed 35-3424] SLL Assignment failed ILP VU19P

Vivado报错[Routed 35-3424] SLL Assignment failed ILP VU19P

weixin_39896700的博客 1408

Kbone 基础 - [03] Vue + Kbone 实现 Todos App

1、搭建Vue开发环境 在命令行输入以下命令,创建一个 vue-todos 项目: // 在全局安装 @vue/cli npm install -g @vue/cli // 在kbone目录下创建vue-todos项目 vue create vue-todos // 运行项目 cd vue-todos npm serve 2、编写Vue todos代码 2.1 改写main.js 将 main.js 引入的 App.vue 组件替换为 Todos.vue 组件: import Vue from 'vu

sdasadasds的博客 312

【异常】Claude Code 400错误(Extra inputs are not permitted)解决方案

摘要:Claude Code 2.0.37+版本因API请求包含未支持的custom.input_examples参数导致400错误,使核心功能失效。解决方案是降级至稳定版v2.0.32:先卸载当前版本(npm uninstall -g @anthropic-ai/claude-code),再安装指定版本(npm install -g @anthropic-ai/claude-code@2.0.32),最后验证请求是否恢复正常。该问题确认在v2.0.32版本不存在。(148字)

奶爸的编程之路,也就一周冷个三天 2036

统信UOS丨开机无法进入系统 无法打开控制台访问权限,root账号被锁定(cannot open access to console, the root account is locked)

步骤四:分别打开文件发现Roota下的fstab就是我们要找的文件,打开查看Roota的属性发现其为挂载的磁盘nvme0n1p3。步骤三:按Win+E打开文件管理器在分区中查找/etc/fstab文件,发现Roota和Rootb下都有该文件。步骤二:按键盘Ctrl+Alt+F4,进入终端控制台,如下图所示输入startx回车,进入桌面。步骤一:找到UOS系统安装的U盘,选择U盘启动进入安装界面,如下图所示。步骤七:关机,拔出U盘,启动电脑,OK,问题解决。

Reyn_观极 1万+

Kbone原理解析与小程序技术选型

作者 |马倩来源 |https://developers.weixin.qq.com/community/develop/article/doc/0006a6326b8d38e56b...

web前端开发 527

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1561

技术交底小程序_Kbone原理详解与小程序技术选型

作者:马倩转发链接:https://mp.weixin.qq.com/s/LlZB6ZC5NkxnBj-C5iZNnAKbone原理解析官方介绍“Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。”Web端框架基本原理首先我们来看下普通Web端框架,以Vue框架为例,一份Vue模板对应一个组件,在代码构建阶段编译成调用Dom接口的JS函数,执行此JS函数就会创建出组件对应的Dom树,...

weixin_39595310的博客 743

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

11无监听程序_Kbone原理详解与小程序技术选型

作者:马倩转发链接:https://mp.weixin.qq.com/s/LlZB6ZC5NkxnBj-C5iZNnAKbone原理解析官方介绍“Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。”Web端框架基本原理首先我们来看下普通Web端框架,以Vue框架为例,一份Vue模板对应一个组件,在代码构建阶段编译成调用Dom接口的JS函数,执行此JS函数就会创建出组件对应的Dom树,...

weixin_32915107的博客 203

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

微信官方小程序同构新方案Kbone全解析

导语 |随着小程序的发展,Web 端和小程序同构的呼声也越来越大,为此微信官方提供了 Kbone 这一套方案。旨在让开发者可以用最熟悉的方式来完成一个多端 APP 的开...

QcloudCommunity的博客 2586

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

小程序多平台同构方案分析-kbone 与 remax

当前国内小程序平台众多,微信小程序、支付宝小程序、头条小程序、以及未来还会出现的新小程序平台,所以为了解决一套代码可以在多个小程序平台上运行,出现了多种方案来解决,京东的 Taro、蚂蚁的 Remax、微信的 Kbone,各有特点,主要归为两种类型,编译时与运行时适配两种。 此文介绍国内主流小程序的架构,以及通过运行时适配可达到一套小程序代码运行在多个小程序平台上的方案,主要介绍 kbone 与...

Dreawer微信小程序联盟 1851

wxml 判断 小程序_【第1765期】微信官方小程序同构新方案Kbone全解析

前言在【第1763期】kbone,十分钟让Vue项目同时支持小程序中,对Kbone做了一个简单的介绍,不知道你有去试试todo的例子了么?今日早读文章由腾讯云@尾尾授权分享。本文来自公号:云加社区(ID:QcloudCommunity,腾讯云官方开发者社区)@june,腾讯前端开发工程师。2016 年加入腾讯,曾参与花样直播、QQ 群等相关业务,现主要负责微信开放社区、微信小程序框架业务...

weixin_28869849的博客 121

api 微信内置浏览器js_微信官方小程序同构新方案Kbone全解析

随着小程序的发展,Web 端和小程序同构的呼声也越来越大,为此微信官方提供了 Kbone 这一套方案。旨在让开发者可以用最熟悉的方式来完成一个多端 APP 的开发,降低开发门槛。本文是Kbone作者june在云加社区微信群中的分享整理总结而成。同时,june将出席11月16日的TWeb腾讯前端技术大会,欢迎现场交流。大家好,我是来自腾讯微信小程序团队的前端开发工程师:june。小程序作为一种新兴...

weixin_30082367的博客 252

小程序使用vant-dialog组件内容出不来_微信官方小程序同构新方案Kbone全解析

导语 |本文是Kbone作者june在云加社区微信群中的分享整理总结而成(编辑:尾尾)。同时,june将出席11月16日的TWeb腾讯前端技术大会,欢迎现场交流。大家好,我是来自腾讯微信小程序团队的前端开发工程师:june。小程序作为一种新兴地链接用户与服务的方式,相信大家都或多或少接触过。对于开发者来说,它是一种类似 Web 但又不同于 Web 的开发模式,它提供了一套自定义的 AP...

weixin_35843410的博客 1097

监听程序当前无法识别_【第1765期】微信官方小程序同构新方案Kbone全解析

前言在【第1763期】kbone,十分钟让Vue项目同时支持小程序中,对Kbone做了一个简单的介绍,不知道你有去试试todo的例子了么?今日早读文章由腾讯云@尾尾授权分享。本文来自公号:云加社区(ID:QcloudCommunity,腾讯云官方开发者社区)@june,腾讯前端开发工程师。2016 年加入腾讯,曾参与花样直播、QQ 群等相关业务,现主要负责微信开放社区、微信小程序框架业务...

weixin_39789525的博客 109

下用npm跑vue_kbone,十分钟让Vue项目同时支持小程序

什么是kbone微信小程序开发过程中,许多开发者会遇到 小程序 与 Web 端一起的需求,由于 小程序 与 Web 端的运行环境不同,开发者往往需要维护两套类似的代码,这对开发者来说比较耗费力气,并且会出现不同步的情况。为了解决上述问题,微信小程序推出了同构解决方案 kbone 来解决此问题。那么,kbone 要怎么使用呢?这里我们将通过一个 todo 的例子来跟大家讲解。基本结构首先,...

weixin_36257799的博客 226

微信小程序怎么在wxml中插入多个图片_微信官方小程序同构新方案Kbone全解析

随着小程序的发展,Web 端和小程序同构的呼声也越来越大,为此微信官方提供了 Kbone 这一套方案。旨在让开发者可以用最熟悉的方式来完成一个多端 APP 的开发,降低开发门槛。本文是Kbone作者june在云加社区微信群中的分享整理总结而成。同时,june将出席11月16日的TWeb腾讯前端技术大会,欢迎现场交流。大家好,我是来自腾讯微信小程序团队的前端开发工程师:june。小程序作为一种新兴...

weixin_39964660的博客 1145

demo解析 小程序node.js_Kbone原理解析 & 小程序技术选型

作者:马倩链接:Kbone原理解析 & 小程序技术选型来源:微信开放社区著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。Kbone原理解析官方介绍 “Kbone 是一个致力于微信小程序和 Web 端同构的解决方案。” Web端框架基本原理首先我们来看下普通Web端框架,以Vue框架为例,一份Vue模板对应一个组件,在代码构建阶段编译成调用Dom接口的JS函数,执行...

weixin_31237295的博客 144

2024年Kbone 基础知识—Vue + Kbone实现Todos App_vue 使用 kbone(2),2024年最新web前端工程师面试题目和答案解析

框架原理真的深入某一部分具体的代码和实现方式时,要多注意到细节,不要只能写出一个框架。算法方面很薄弱的,最好多刷一刷,不然影响你的工资和成功率😯在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!!开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

2401_84447207的博客 1049
上一篇: 为什么有人吐槽vue3.0没有vue2.0好用
下一篇: react-hook的存在是否可以完全替代redux
小小荧
博客等级 码龄9年 133粉丝 92原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值