Replies: 1 comment 1 reply
-
这个有pr在实现吗?动态模版打算如何实现,如果用自定义组件,里面会有很多if else判断吧 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
概述
在 Taro 中实现对 鸿蒙 && OpenHarmony 的支持,开发者可以使用 Taro 开发鸿蒙 && OpenHarmony 应用。
动机
因为鸿蒙应用支持使用 JS 开发 UI 层,其语法与小程序相接近,所以我们希望把 Taro 多端适配的能力扩展到鸿蒙平台上,达成三大目标:
使用案例
1. 配置插件
2. 使用编译命令
详细设计
鸿蒙 JS UI 的开发方式与小程序类似,因此可以很大程度地沿用 Taro 在小程序端的架构。
接下来将简单介绍实现方案。
一、插件化
Taro 将以 端平台插件 的形式支持 HarmonyOS 平台,主要的兼容工作由此插件完成。
开发者引入插件
@tarojs/plugin-platform-harmonyos
即可编译为鸿蒙应用。二、 渲染方案
基本复用小程序端的渲染方案,若干部分需要进行微调:
1. 模板
在小程序端,Taro 使用
<template>
作为 DOM 节点进行渲染。而鸿蒙目前还不支持<template>
,只能使用自定义组件进行代替。但自定义组件的开销大,节点过多时会出现性能问题。因此,需要使用端平台插件的修改模板功能,对生成的模板内容进行改造。
2. 运行时
2.1 数据绑定
使用
this.$set
代替this.setData
。2.2 生命周期
修改
App
和Page
构造对象的生命周期为鸿蒙规范。2.3 路由参数
鸿蒙生命周期函数中获取不到路由参数,需要从
this.data
中获取。2.4 事件
把事件对象的类型
click
改为tap
,兼容小程序规范。三、 组件库
使用鸿蒙原生语法去封装一系列符合微信小程序规范的自定义组件。
如使用鸿蒙的
<input>
组件去封装一个遵循微信小程序规范的<checkbox>
自定义组件。四、 API
使用鸿蒙的 API 去封装遵循微信小程序规范的 API。
如使用鸿蒙
@system.router
提供的路由能力去实现微信小程序规范中的navigateTo
、redirectTo
等 API。五、样式
鸿蒙只支持部分的 CSS 样式,开发者需要根据鸿蒙的规范手动进行调整。
鸿蒙 CSS 样式参考:文档
六、 调整 App、Page、Component 的构造方式
在小程序中,App、Page、自定义组件都有各自的构造器:
而在鸿蒙中,则都统一为导出一个默认对象:
因此需要把 Webpack 的编译产物修改为以下形式:
七、编译调整
鸿蒙应用可以由多个 PA 组成,每个 PA 里又可以包括多个 JS FA(对应多个 JS 项目)。
多 PA
以 monorepo 的形式组织项目,共享依赖和公共逻辑。
多 FA
以往每个 Taro 项目对应编译出一个小程序项目(对应鸿蒙的一个 JS FA),因此 Taro 需要支持多项目编译。
缺陷
<template>
的替代进行渲染,存在性能问题。globalThis
实现全局对象,不清楚鸿蒙将来是否会修改此 API。鸿蒙存在的问题
替代选择
N/A
适配策略
Beta Was this translation helpful? Give feedback.
All reactions