APP开发跨端目前国内常见的跨端框架有React Native,Flutter,uni-app

uni-app是双渲染引擎,webview和weex(原生渲染,性能比webview高,但本身坑较多)可切换。跟小程序的体验类似,但是比小程序流畅,使用uniapp开发小程序比用小程序官方工具开发的舒服,因为使用的是vue语法,更新数据不需要频繁的setData(uni-app基于Vue Runtime深度定制实现,并借助了Vue的nextTick机制,大幅降低了setData的调用频次,比如更新多条数据,原生小程序是一条一条多次引发逻辑与视图层通讯,uniapp是把数据合并后再触发一次通讯。),性能远在原生开发之上,这个结果,和web开发类似,web开发也有原生js开发、vue、react框架等情况。如果不做特殊优化,原生js写的网页,性能经常还不如vue、react框架的性能。uniapp对于支付、分享、第三方登录、推送等功能都做了封装,使用起来非常方便。但是在ui这块有一些不足,缺少APP的灵活性,动画使用不方便,css动画使用多了会卡顿

React Native一般用于app的跨端,亦可以开发桌面端应用,开发小程序需要通过Alita转编译(不支持直接使用小程序的原生api,因此小程序如果出新功能还需要官方更新,因此不建议使用)。React Native 拥有庞大的生态圈,各种轮子帮助开发者快速开发跨平台的app,但是跟uniapp一样,定制化的需求如果涉及到原生业务且没有合适的轮子,还是需要原生处理ios/android端。
可以直接使用Native原生动画,轻松实现果冻弹动,面板基于某个点展开等等,这些用Web来做就难上加难。

Flutter拥有自己的一套渲染引擎,因此ui方面天然的没有兼容问题(也可以说Flutter的跨端是UI跨端)。Flutter的动画对象会根据屏幕刷新率每秒产生很多个(一般是60个)浮点数,只需要将一个组件属性通过补间(Tween)关联到动画对象上,Flutter会确保在每一帧渲染正确的组件,从而形成连贯的动画。而web需要实现相同的动画比较难而且还没flutter顺畅。Flutter的UI很“牛逼”,但最麻烦的也是写UI,flutter布局书写有些类似于vue的render函数渲染元素,一但嵌套过多保准上午写的代码下午要改,光要找准地方就颇费功夫。只能常规布局封装为组件调用来尽量解决,而且一定要多注释!

一些UI、前端可能有的误解
1.透明(沉浸式)状态栏的兼容
   透明状态栏是界面图片延伸到状态栏,形成程序和状态栏的颜色一体的效果,但是这个说法一般指的是APP,小程序也有相关概念,都是取消原生导航栏然后自行定义,不同的是小程序固定右上角有个胶囊按钮,APP可以在右上角放些按钮,小程序是不行的。H5移动端(微信h5)则无此概念

2.真的能一套代码运行多端么
   UI确实可以多端兼容(小程序端前些日子发现子元素需要继承page高度的话不能设height,自动继承了,写了反而有问题,以前不是这样的。涉及到了需要单独处理),但是功能不一定,有些个性化的功能还是需要原生去参与。而且跨端的框架UI有一致性,等于放弃了一些安卓和ios不同的体验度