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
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
概述
在 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