鸿蒙应用开发,比 React 体验更好

这篇具有很好参考价值的文章主要介绍了鸿蒙应用开发,比 React 体验更好。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

痛点

一直以来,使用 HTML + CSS 来表达 UI 结构,都有一个若隐若现的痛点。痛点来源主要体现在 DOM 结构的语义表现力不足。

例如这样一段代码,我们能够很清晰的知道 DOM 结构是怎么样的,但是其具体的布局结构方式和特性就不知道了。

<div>
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

尽管 HTML 也新增了许多语义化标签来弥补这种语义表现力缺失的问题,但是由于大家的应用场景是在是很难和这些语义化标签非常契合的对应上,从而导致了语义化标签的使用并不是很广泛,到目前为止,语义化标签都处于一个很尴尬的境地

<div>
  <header></header>
  <nav></nav>
  <section></section>
  <footer></footer>
</div>

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

导致语义化标签被广大开发者冷淡的很大一部分原因,是因为 HTML 设计的这几个语义化标签确实是不太匹配日常开发的大多数具体场景。

好在我们在使用 React/Vue/Angular 开发项目时,可以通过自定义组件来增强某一个部分的语义表达

例如在 React 中,我们编写一个分页列表,你一眼就能看出来我的页面结构长什么样

<RefreshScrollView>
  <Filter />
  <Pagination />
</RefreshScrollView>

这已经是 UI 表述的最佳实践。但是我们也不是只看最外面这一层,当你深入到更底层的逻辑时,最后看到的还是 div,语义表现力不足的事实总是存在的

因此为了解决这个问题,在 antd 等优秀的开源框架中,为了增强组件的语义表现力,会提供 Row Cloumn Flex Grid 等容器组件供开发者使用。

这其实是 UI 表达的最佳实践。但是 antd 等框架对于这种思路的践行并不是非常彻底。他没有非常明确的建议说,我们不要使用 div 了,所以许多开发者就算使用了这种方式,也不是把它当成最佳实践来使用,很多时候只是为了少些两行 css 代码才使用他们。

很多时候也源自于 UI 组件库本身也没有想要去做一个大而全的布局思维重构,从而导致 antd 虽然提出了这个方向和构思,但是普通开发者也不一定能领会到。

HTML + CSS 语义表现力缺失还体现在结构和样式分离。有很大一部分开发者并不喜欢写完结构之后,还要重新去另外的文件给他补充样式。并且这样方式在维护的时候也并不友好,隐性的规则让样式的最终结果变得扑朔迷离。

最明显的一点就是默认的样式继承规则和样式优先级,这东西让许多人在调样式的时候非常难受

所以很多后端来写前端,可能他什么都能搞定,就是搞不定 css 样式,这可太难了,哈哈哈哈。

许多开发者都意识到了这种痛点。因此 css in js 的方案层出不穷。原子 css 又再次重新火了起来。不过在根源上由于 HTML 文档流的设计不够简洁,视觉格式化模型中涉及到的概念太多,因此最终在使用上依然会有不小的理解成本与麻烦。

例如大家在使用原子化 css 的时候,很容易会出现一个元素上套用了太多 class 的情况,反而导致可读性极大的降低

<!--随意搞的一个简易案例来说明这个问题-->
<button
  class="blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600 text-sm text-white font-mono font-light py-2 px-4 border-2 rounded border-blue-200"
>
  Button
</button>

因此我们需要思考新的方案来解决这种场景,例如使用一个变量名来复用这些样式

const btn = 'blue-400 hover:blue-500 dark:blue-500 dark:hover:blue-600 text-sm text-white font-mono font-light py-2 px-4 border-2 rounded border-blue-200'

<button class={'btn'}>
  Button
</button>

这些理念都非常好。但是原子化 CSS 毕竟不是直接编写样式,他的适用场景会受到很大的限制。

并且当我们在思考如何复用原子化 CSS 的时候,其实就表示,开发者确实在期待一套完整的,全新的 UI 布局表述方式。

这就是鸿蒙应用开发中, ArkUI 的布局思路。

在设计上,arkUI 充分吸收了 HTML 等客户端方案发展这么多年的经验教训,在设计上完全摒弃了文档流的概念,转而强调容器的概念。为了应对不同的场景,arkUI 目前已经支持了 26 种容器组件。因为其明确的语义化,学习成本也非常低,例如如下容器组件,我们一看就能知道这是用来干嘛的

Row
Column
Flex
Grid
List
Scroll
Swiper
Tabs
Refresh
...

并且布局方式到底是什么情况,由容器组件说了算,而不是子元素的类型说了算。

// 表示从左到右布局
Row() {
  Text('hello world')
  Text('hello world')
  Text('hello world')
}

// 表示从上到下布局
Column() {
  Text('hello world')
  Text('hello world')
  Text('hello world')
}

除了在语义化上非常重视之外,arkUI 并不支持结构与样式分离,而是把设置样式的行为当成一个 set 方法,支持一种链式调用的方式来做到样式与结构合并的最终结果

Text('width: 10px')
  .fontSize('12fp')
  .color('#333')
  .border({
    width: '10px',
    color: Color.Red,
    style: BorderStyle.Dotted,
    radius: 15
  })

这其实是原子化 css 的进化版。如果你觉得原子化 CSS 真香,那么这种方式的好处你也一定能够快速理解到。

而且他比原子化 CSS 学习和记忆成本更低,更灵活,可以说是原子化 CSS 的理想化实现。

ArkUI 在设计上,还引入了一个风险较大的设定:样式后置。

这个最开始是在 Swift UI 中出现,可能许多前端开发都没见过

Column() {
  Text('hello text')
    .fontSize('12fp')
    .fontColor(Color.Black)
    .fontStyle(FontStyle.Italic)
}
.width(20)
.height(20)
.border({
  width: 10,
  color: Color.Blue
})

之所以说他风大,是因为这种书写方式大家都没见过,可能会容易给人的第一感觉就是:什么玩意儿 …

哪怕是在 Flutter 的设计中,也是可前置可后置,然后不管是文档案例,还是大家在开发中,其实也是让样式前置

// 伪代码
Widget build(BuildContext context) {
  return new Container(
    width: 20,
    height: 20,
    ...
    child: new Text()
  )
}

我刚开始在学习 Swift 使用的时候也会担心这种样式后置的方式会让样式堆在一起比较难受,但是用了一段时间之后发现,真香!

我们来看一下这样一段代码。

Column() {
  Text(`最新值:${this.counter}`)
  Column().block()
  Column().block()
  Column().block()
    .onClick(() => {
      this.counter ++
    })
}
.margin(10)
.border({width: 4})
.width('50%')
.height('400lpx')
.justifyContent(FlexAlign.SpaceEvenly)

.block 是样式的复用。

@Extend(Column) function block() {
  .width(40)
  .height(40)
  .backgroundColor(Color.Orange)
  .border({
    width: 2,
    color: Color.Red
  })
}

之所以我觉得真香的原因是因为我们在开发过程中,其实子元素的样式重复非常多,因此我们会考虑将子元素的样式封装起来,用一些方式来复用它

这样,当我们将样式后置之后,虽然我们依然对父元素添加了一串样式,但是前面一部分的代码结构就依然非常简洁。

以前在刚开始接触学习 Flutter 的时候,也觉得 Flutter 的 UI 表现形式太糟糕太复杂了,为什么不学着 JSX 那样搞简单一点,并且其他人的这个类似想法还在 github 上有非常激烈的探讨。

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

直到后来我才理解到,这种注重语义化和容器的 UI 表达方式,可能比 JSX 更好,这才是最佳实践。

除此之外,这种声明式语法的编译速度会比 JSX 更快,性能上会更好

2 总结

鸿蒙应用开发的 ArkUI,和基于 HTML + CSS 的 React 相比,能够更方便的使用语义化,提倡样式与结构合并,并在 UI 设计上,简化了视觉格式化模型,注重容器特性,学习理解成本得到了极大的降低,并且基于 set 的思维方式链式调用样式,大胆的将样式后置,在我个人的主观感受里,这是一种比 React,比 Flutter 更舒适的开发体验

为了能让大家更好的学习鸿蒙 (OpenHarmony) 开发技术,这边特意整理了《鸿蒙 (OpenHarmony)开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙 (OpenHarmony)开发学习手册》

入门必看:https://qr21.cn/FV7h05

  1. 应用开发导读(ArkTS)
  2. ……

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

HarmonyOS 概念:https://qr21.cn/FV7h05

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

如何快速入门?:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. 构建第一个JS应用
  4. ……

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架

基于ArkTS 开发:https://qr21.cn/FV7h05

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

鸿蒙应用开发,比 React 体验更好,OpenHarmony,鸿蒙,Harmony OS,harmonyos,react.js,华为,鸿蒙开发,移动开发,前端,前端框架文章来源地址https://www.toymoban.com/news/detail-836478.html

到了这里,关于鸿蒙应用开发,比 React 体验更好的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙HarmonyOS应用开发初体验

    最近华为发布mt60新机火了,作为一名移动开发程序员,对鸿蒙系统开发移动端就很感兴趣了。 开发工具:HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 下载完后按默认安装就可以了,界面跟AS很类似,之前我jdk环境配置就不在配置了,不懂的可以百度下很多教程。 这是基

    2024年02月09日
    浏览(54)
  • 【鸿蒙】鸿蒙操作系统应用开发入门级初体验

    目录   一 鸿蒙相关资源 二 创建新工程 三 程序设计 鸿蒙学堂:https://hmxt.org/   (1)下载鸿蒙的IDE:DevEco Studio,安装过程一路next即可; (2)安装好之后,新建工程,我这边使用Java进行开发,所以选择Empty Ability(Java),选择完成之后,点击Next: (3)工程配置,主要配置一下

    2024年02月07日
    浏览(46)
  • OpenHarmony鸿蒙原生应用开发,ArkTS、ArkUI学习踩坑学习笔记,持续更新中。

    结论:在BIOS里面将Hyper-V打开,DevEco Studio模拟器可以成功启动。 如果在另外的文件中引用组件,需要使用export导出,并在使用的页面import该自定义组件。 1.自定义组件(被导入组件) 2.组合组件(引用自定义组件) 1、main_pages.json配置文件配置静态路由地址,配置文件

    2024年02月04日
    浏览(80)
  • HarmonyOS鸿蒙开发指南:基于ArkTS开发 轻量级智能穿戴 体验应用、构建布局、绘制样式​​​​​​​和交互事件

    目录 体验应用 构建布局 绘制样式​​​​​​​ 交互事件 HelloWorld工程目录如下图所示: 图1  目录结构 pages/index/index.hml

    2024年02月01日
    浏览(56)
  • OpenHarmony应用开发——在标准OpenHarmony上运行应用-标准OpenHarmony工程设置

            前面我们创建了一个工程并使其在HarmonyOS系统上运行,本文我们来阐述一下如何在标准的OpenHarmony开发板或系统上运行。         首先,打开Settings.         将SDK选择为OpenHarmony,第一次选择路径应该为空,随后点击Edit。         选择好存储路径后,随后点击

    2024年02月04日
    浏览(39)
  • 《HarmonyOS开发 – OpenHarmony开发笔记(基于小型系统)》第4章 OpenHarmony应用开发实例

    开发环境 : 开发系统:Ubuntu 20.04 开发板:Pegasus物联网开发板 MCU:Hi3861 OpenHarmony版本:3.0.1-LTS 1.新建工程及源码 新建目录 在applications/sample/myapp中新建src目录以及myapp.c文件,代码如下所示。 新建编译组织文件 新建applications/sample/myapp/BUILD.gn文件,内容如下所示: static_libr

    2024年02月09日
    浏览(82)
  • OpenHarmony开发-连接开发板调试应用

    在 OpenHarmony 开发过程中,连接开发板进行应用调试是一个关键步骤,只有在真实的硬件环境下,我们才能测试出应用更多的潜在问题,以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先,我们搭建了OpenHarmony的开发环境,安装 OpenHarmo

    2024年04月11日
    浏览(44)
  • openharmony应用开发HDC 常用命令

    1.查看hdc版本: hdc --version 2.查看设备sn号: hdc list targets 3.进入shell: hdc shell 4.重启设备 hdc shell reboot 5.设置RK开发板根目录的读写权限 hdc shell mount -o rw,remount / # 此命令用于解决推包时提示只读路径,无法推送。例如:[Fail]Error opening file: read-only file system, path:/system/lib/libace.z.

    2024年04月14日
    浏览(37)
  • HarmonyOS/OpenHarmony应用开发-Stage模型应用/组件级配置

    在开发应用时,需要配置应用的一些标签,例如应用的包名、图标等标识特征的属性。本文描述了在开发应用需要配置的一些关键标签。图标和标签通常一起配置,可以分为应用图标、应用标签和入口图标、入口标签,分别对应 app.json5配置文件 和 module.json5配置文件 文件中的

    2024年02月13日
    浏览(65)
  • OpenHarmony应用开发入门教程(一、开篇)

    华为正式宣布2024年发布的华为鸿蒙OS Next版将不再兼容安卓系统。这一重大改变,预示着华为鸿蒙OS即将进入一个全新的阶段。 都说科技无国界,这是骗人的鬼话。谷歌的安卓12.0系统早已发布,但是自从受到美影响,谷歌就拒绝再向华为提供安卓系统。你说它横不横,就是给

    2024年02月19日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包