当前位置:网站首页>Taro小程序跨端开发入门实战
Taro小程序跨端开发入门实战
2022-08-08 16:13:00 【InfoQ】
背景
什么是 Taro
为什么用 Taro
可选技术方案可选技术方案


对比分析

- mpvue 是美团研发的框架,多端适配效果不好,很久问题都没人维护;
- WePY 是腾讯出的组件化框架,但是无法适配多端;
- Chameleon 在多端适配方面表现很突出,缺点是不支持京东小程序,无法转换原生小程序(想用只能重写项目);
- Taro 优秀的特性,遵循 React/Vue 语法规范,引入的现代化的开发流程,让开发更专注核心代码,提供健全的代码检查方式。
多端需求

- 可以实现微信小程序原生代码转换到微信平台,百度平台等;
- Taro 框架是唯一一款实现京东小程序适配的框架;
- 支持 React/Vue 语法,更好的支持组件化和 TypeScript;
- 行业影响力大,社区活跃,京东内部优秀团队研发的框架,支持有保障,研发团队靠谱非常支持我们的工作;
- 更加完善的UI组件库,支持多端同步调试能够适配更多终端;

设计思想
主要采用 React 开发方式

用 React 写多端应用

核心思想
以微信小程序为例以微信小程序为例



Taro 代码编译原理





多端适配基础标准
- 基础框架(生命周期、组件API):以React的生命周期、组件api为基础,小程序的特性作为补充
- 标准组件库(View、Button): 以微信小程序组件为标准,各端模拟实现
- 标准Api (request、setState):扩展的小程序标准Api,各端模拟实现


快速上手
初始化项目



运行项目

多平台启动命令示例:

微信原生小程序转换 Taro 小程序

Taro 项目的组成

Taro项目目录结构



多端适配
多终端配置文件编写

多终端入口文件

差异化配置
- 不同平台加载对应的文件:
- 每个平台差异化配置信息:
- 地图类型;
- 渠道信息;
- 请求头信息;
- 。。。

- 代码差异化处理


多端适配案例
- 样式解析:
- 微信是 rpx,百度小程序 vw,京东小程序 px;
- Taro 统一使用 px 通过框架处理转换成对应平台的像素,因此 px 值不要使用单数;
- 1px(像素)的边框通常会转换成平台对应单位会导致无法显示, 可以使用大写的PX单位,例如: 1PX ;
- 百度小程序和京东小程序不支持 externalClasses,其它小程序也可能不支持避免使用;
- 模块导入和导出:
- 导入模块需要使用ES6 的 import, 不要使用 require 到 JS 文件(有些平台不支持);
- 内联本地图片资源可以使用 require 动态导入;
- 导入外部资源的 url 必须使用 https,有些平台或机型不支持 http ;
- 小程序插件导入可以使用 require 但是要做多平台适配和兼容性处理;
- 组件开发细节:
- 组件 key 取值,不要使用 index ,对象的 id 属性要先解构出来;
- 组件渲染条件取 length 属性页面不更新;
- dataset 问题:百度和微信获取的不一样,都要用小写来保持代码一致: 这种驼峰的:data-goodsIndex={index} ,微信会转成全小写 goodsindex, 百度会保留驼峰 ,正确地写法:data-goodsindex={index} ;
- 层次较深的状态不会更新时,需要解构变量;
- 转换成 vw 样式有偏差,确保样式的通用性;
- 个别组件 height: auto 有bug,不写没事;
- line-height 居中有偏差,用 flex 比较稳妥;
- fixed 布局居底要设置 left: 0, bottom: 0 ,不写默认会有问题(默认在中间渲染);
- mask 组件层级较深时,可能不会更新状态,可以使用 tt-modal 代替;
- 图片裁剪,语音识别,打印功能等依赖原生 API 不支持;
- 状态更新从有到无需要显性设置 null ,例如将列表组件隐藏:this.setState({list: null}) {list && <组件实例>};
- 不支持全局覆盖组件样式,如果想兼容需要单写加上拼接样式名;
- 不支持小程序分包,需要单独配置页面路由信息;
- showModal 弹窗不能定制 confirmColor 属性;
- storagesync 不支持存储 json 数据,读取需要自己手动JSON.parse;
- 不支持 canvas绘画API:微信自定义分享功能,图片裁剪,订单条形码等功能都做不了;
- 不支持同层渲染,原生组件上只能使用 Cover 组件;
- ios 内嵌H5,如果url带参数,需要手动做一下urlencode编码;
- H5页面使用小程序 webview 不具备全部京东 app webview 功能,有些功能不支持;
- 京东小程序分享 URL 和 其它小程序分享的 URL 不一样,要注意路径的差异区分:例如:shareURL: 京东小程序: page/index/index 微信小程序:/pages/index/index
多端同步调试

生态与规划
物流风格的 Taro UI组件库—Tarot(已适配Taro3.0)


定制化 Taro 模板工程定制化 Taro 模板工程
小程序 Mini Debug 工具


结语:
边栏推荐
- 基于华为云ModelArts的水表读数识别开发实践【华为云至简致远】
- VIT:Transformer进军CV的里程碑
- 《流浪方舟》首发重现,点我试玩
- 手把手教你uniapp接入聊天IM即时通讯功能-源码分享
- 使用FastApi服务解决程序反复调试导致速度过慢的问题(以tsfresh为例)
- 淘宝API常用接口列表与申请方式
- 快速排序(C语言版)
- [Unity entry plan] Unity instance - how to protect data members through encapsulation in C#
- 带你玩转“超大杯”ECS特性及实验踩坑【华为云至简致远】
- 使用 FasterTransformer 和 Triton 推理服务器加速大型 Transformer 模型的推理
猜你喜欢
Streamsets Data Collector 3.12
Smobiler的复杂控件的由来与创造
全网首发!消息中间件神仙笔记,涵盖阿里十年技术精髓
C#/VB.NET 将PDF转为PDF/X-1a:2001
Superset 1.2.0 installation
跟我一起来学弹性云服务器ECS【华为云至简致远】
国产数据库的红利还能“吃”多久?
[Unity entry plan] Unity instance - how to protect data members through encapsulation in C#
C#/VB.NET convert PDF to PDF/X-1a:2001
【kali-权限提升】(4.2.5)社会工程学工具包:PowerShell攻击向量(防报毒)
随机推荐
方程组解的情况与向量组相关性转化【线代碎碎念】
The situation of the solution of the equation system and the correlation transformation of the vector group
使用 FasterTransformer 和 Triton 推理服务器加速大型 Transformer 模型的推理
Groovy XML JSON
Kubernetes-基础-常用命令
bzoj3693 round table hall theorem + segment tree
Grafana配置LDAP认证
Smobiler的复杂控件的由来与创造
Lecture 207, Class Schedule
成员变量和局部变量的区别?
jupyter notebook hide & show all output
[Unity entry plan] Use the double blood bar method to control the blood loss speed of the damage area
非常菜的一个批量布置waf脚本
Superset 1.2.0 installation
[Online interviewer] How to achieve deduplication and idempotency
UTF-8 BOM文件导致配置文件无法读取
C. Build Permutation(构造/数论)
国泰君安证券新手开户、有安全保障吗?
线程本地存储 ThreadLocal
线程本地存储 ThreadLocal