2024年鸿蒙最新鸿蒙应用开发,比 React 体验更好(2),2024年最新腾讯面试岗位

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1
2
3
4

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

图片

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

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

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

这已经是 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

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

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

这些理念都非常好。但是原子化 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
})

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值