Flutter(Dart)中能否使用类似JSX的语法编写代码?

发布于 1周前 作者 nodeper 来自 Flutter

本人以前用 React Native ,JSX 代码结构简单明了,可读性强,学习难度低,简直不要太舒服。

现在切换到 Flutter , 其他都好说,就是这 UI 代码真让人头大,一个在 React Native 上十几行就能搞定的功能在 Flutter 中可能要几十行甚至上百行,代码结构也异常混乱。

回首编写 React Native 的时光,真是怀念啊……因此突发奇想,如果能在 Flutter ( Dart )中使用类似 JSX 的语法编写 UI 该多好……

请教各位大神,如果想要实现这个功能,需要从哪些方面入手呢?


Flutter(Dart)中能否使用类似JSX的语法编写代码?

更多关于Flutter(Dart)中能否使用类似JSX的语法编写代码?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

7 回复

> 本人以前用 React Native ,JSX 代码结构简单明了,可读性强,学习难度低,简直不要太舒服。

出于什么考虑换 Flutter ?

> 一个在 React Native 上十几行就能搞定的功能在 Flutter 中可能要几十行甚至上百行,代码结构也异常混乱

结构混乱更可能是把所有东西都内联在 build() 里了,建议抽取子控件和方法(例如 onTap 等回调)。


> 如果想要实现这个功能,需要从哪些方面入手呢?

据我所知,Dart 不支持 DSL…

更多关于Flutter(Dart)中能否使用类似JSX的语法编写代码?的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


是公司要用的吧。
其实 flutter 不是压倒性的比 RN 方案更好,不知道为什么很多公司逃跑似的都不用 RN 了。

感谢回复!

> 出于什么考虑换 Flutter ?

第一点是工作原因,这也是感受到“代码结构异常混乱”的直接原因 :(

第二点是看重 Flutter 真正的全端兼容能力,这点比 React Native Windows 好太多,至少 Flutter 编译出来的是真正的 Win32

> 结构混乱更可能是把所有东西都内联在 build() 里了

是这样的,我自己写 Flutter 也会通过这些方法减少复杂性,可惜有很多同事就硬写,真的很难受,硬写就算了,children 还放在一堆参数中间 :( 看着这参差不齐的两三百行代码简直是折磨

有这些痛苦的经历,所以我才会怀念 JSX

> Dart 不支持 DSL

那有没有其他方式的实现方法呢?比如在编译过程中加入一个 filter 把 xml 格式的代码转换成 dart 的代码?

据我所知 flutter 社区对于这个问题也挺分裂的……

我们公司看重 flutter 主要是因为它确实有很多代码能在生产环境多端复用,这对小公司是非常友好的,如果使用 React Native 那桌面端还要专门分一组人来做 win32 ,而 flutter 大部分时候只要 UI 上改改就能用,核心功能几乎不用动

flutter 没有框架级别统一的 children 抽象,没法在不引入 breaking change 的情况下设计出 jsx 这样的东西

你是指 children 和 child 吗?

在Flutter(Dart)中,你不能直接使用类似JSX的语法来编写代码。Flutter和Dart是基于完全不同的编程范式和生态系统构建的,而JSX是React(一个JavaScript库)用于描述UI的语法扩展,它允许在JavaScript代码中直接编写类似HTML的标签结构。

Flutter使用Dart语言来构建跨平台的移动应用界面,它通过一套声明式的Widget树来定义UI。虽然Dart没有内建的JSX支持,但Flutter的Widget系统提供了一种非常灵活和强大的方式来构建用户界面,允许开发者通过组合和嵌套Widget来创建复杂的UI结构。

如果你习惯于JSX的语法,可能会觉得Flutter的Widget树初看之下有些不同,但一旦你熟悉了Dart和Flutter的编程模型,你会发现它同样强大且直观。Flutter的Hot Reload功能也使得在开发过程中即时查看UI更改变得非常方便。

总的来说,虽然Flutter(Dart)不支持JSX语法,但它提供了一套功能强大的工具和方法来构建现代、响应式的用户界面。如果你正在考虑将Flutter用于你的项目,建议深入学习Flutter的Widget系统和Dart语言的特性,这将帮助你更有效地利用这个框架来构建出色的应用。

回到顶部