当前位置:首页>安卓软件>车载市场> 正文
react native(react native和flutter)车载市场

react native(react native和flutter)

12个月前 (07-21)类别:车载市场

  • 发布日期:2025-07-15 20:54:51
  • 所属类别:车载市场
  • 下载人数:4704
  • 版本:
  • 大小:

立即下载

扫二维码手机浏览

react native(react native和flutter)介绍

今天给各位分享react native的知识,其中也会对react native和flutter进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

react native 怎么样

React.native是目前唯一靠谱有前途的移动跨平台解决方案。

react native(react native和flutter)

搞移动跨平台,解决方案已经有过很多了。Xamarin, Cordova,基于webView的PhoneGap,还有一大票各种创业公司的方案。它们都很垃圾。原因很简单:为达成“一次编写到处运行”的目的,这些方案不得不对两个主要平台(iOS和Android)的SDK做进一步的抽象,这意味着它们只能兼容两个平台共有的组件,结果就是写出来的app只能做到最平庸的用户体验。特别是微软的Xamarin,连自家的Windows Phone都搞不好,还给Apple和Google的SDK做包装,那能好么?基于Web的方案就更不用说了,本质就是拿HTML套个壳外加一些原生写的插件。

React.native的高明之处在于:它并不追求一次编写到处运行,它放弃了全部代码跨平台这一不切实际的目标。RN的目标很实际:用同一门语言(Javascript),同样的高层架构(Virtual DOM)和设计模式(component-based),针对不同平台分别作出最佳的用户体验。这也就是RN中“native”一词的含义。

在实际开发中,要做到最佳用户体验,针对iOS和Android应该要分别编写UI代码的。实际上RN也鼓励这么做。Android是Android,iOS是iOS,web是web,三者有不同的界面语言和用户习惯,凭什么要一样呢?但除却UI,业务逻辑、data object、web call等等却是可以一样的。再加上采用了同一门语言和设计模式,RN在生产力上非常有竞争力。从另一方面看,Flux设计模式反过来也被原生开发社区接受,Redux库在Java和Swift上都有翻版原生实现,所以你不一定要用RN写app,但你还是可以借鉴采用React的设计模式。React项目对于整个开发社区的影响很正面,比PhoneGap这种催生了一大票廉价app码农的垃圾技术正面多了。

react native(react native和flutter)

另外,纯Javascript的开源库也可以直接应用到ReactJS/ReactNative中,这也进一步提升了生产力。

如何评价 React Native

React native充分利用了Facebook的现有轮子,是一个很优秀的集成作品,并且我相信这个团队对前端的了解很深刻,否则不可能让Native code「退居二线」。

对应到前端开发,整个系统结构是这样:

JSX vs HTML

CSS-layout vs css

ECMAScript 6 vs ECMAScript 5

React native View vs DOM

无需编译,我在第一次编译了ipa装好以后,就再也没更新过app,只要更新云端的js代码,reload一下,整个界面就全变了。

多数布局代码都是JSX,所有Native组件都是标签化的,这对于前端程序员来说,降低了不少学习成本,也大大减少了代码量。不信你可以看看JSX编译后的代码。

复用React系统,也减少了一定学习和开发成本,更重要的是利用了React里面的分层和diff机制。js层传给Native层的是一个diff后的json,然后由Native将这个数据映射成真正的布局视图。

css-layout也是点睛之笔,前端可以继续用熟悉的类css方式来编写布局,通过这个工具转换成constrain布局。

统只有js-objc的单向调用,就是把原生UI组件的方法通过javascritcore或者webview(低版本iOS)映射到js中来,整个调用

过程是异步的,这样的设计令React native可以让js运行在桌面chrome中,通过websocket连接Native

code和桌面chrome,极大地方便了调试。对其中的机制Bang的一篇文章写得很详细,我就不拾人牙慧了:React Native通信机制详解« bang’s blog。但这样设计也会带来一些问题,后面说。

点按操作也被抽象成了一组组件(TouchableXXX),这种抽象方式是我在之前做类似工作中没有想到的。facebook还列出Native为什么和web「手感」不同的原因:实时的点按反馈和取消能力。React Native这套相应机制设计得很完善,能像Native code那样控制整个点按操作的所有过程。

Debug

相当方便!修改了js以后,通过内建的nodejs

watcher编译成bundle,在模拟器里面按cmd+r就可以看到效果。而且按cmd+d,可以打开一个chrome窗口,所有的js都移到了

chrome里面运行,所以什么断点单步打调用栈,都不在话下。

上面的既是特点也是优点,下面说说缺点,或者应该说:「仍然遗留的问题」,在我看来,这个方案已经超越了Hybird方案。

统仍然(不得不)依赖原生组件暴露出来的组件和方法。举两个例子,ScrollView这个组件,在Native层是有大量事件

的,scrollViewWillBeginDragging,

scrollViewWillEndDragging,scrollViewDidEndDragging等等,这些事件在现有的版本都没有暴露,基本上

做不了组件联动效果。另外,这个版本中有大量组件是iOS

only的:ActivityIndicatorIOS、DatePickerIOS、NavigatorIOS、PickerIOS、

SliderIOS、SwitchIOS、TabBarIOS、AlertIOS、AppStateIOS、LinkingIOS、

PushNotificationIOS、Statu**arIOS、VibrationIOS,反过来看,剩余的都是一些抽象程度极强的基本组件。这

样,用户必须在不同的平台下写两套代码,而且所有能力仍然强烈依赖 React native开发人员暴露的接口。

由于最外层是

React,初次学习成本高,不像往常的Hybird方案,只要多学几个JS

API就可以开始干活了。当然,React的确让后续开发变得简单了一些,这么一套外来的(基于iOS)、残缺不全的(css-layout)在

React的包装下,的确显得不那么面目可憎了。

另外,React Native仍然很不完善。文档还不全,我基本上是看着他的示例代码完成的demo,集成到已有app的文档也是今天才出来。按照官方的说法,Android版本要到半年后才发布:Blog| React,届时整个系统设计可能还会有很大的变化。

PS,在使用Tabbar的时候,我惊喜的发现他们居然用了iconfont方案,我现在手头的项目中也有同样的实现,不过API怎么设计一直很头疼。结果,我发现他是这么写的:

<TabBarItemIOS

name="blueTab"

icon={_ix_DEPRECATED('favorites')}

....>

在 _ix_DEPRECATED的定义处,有一句注释:// TODO(nicklockwood): How can this fit our require system?

以上。

下面是一周前,在React native还没开源的时候,通过反解ipa的一些分析过程,有兴趣的可以看看。

------------------------简单粗暴的分割线--------------------

背景和调研手段

React

Native还没开源,最近和组里兄弟「反编译」了Facebook Group(这个应用是用React

Native实现的)的ipa代码,出来几百个JS文件,格式化一下,花了几天时间读了一下源码,对React

Native的内部核心机制算是有了一个基本了解。

React Native的核心实现:

先简单说几点,详细的等回头更新。

1. React Native里面没有webview,这货不是Hybrid app,里面执行JS是用的

JavascriptCore。

2.再说React Native的核心,iOS Native code提供了十来个最基本核心的类(RCTDeviceEventEmitter、

RCTRenderingPerf等)、或组件(RCTView、RCTTextField、RCTTextView、

RCTModalFullscreenView等),然后由React Native的JS部分,组成二十来个基本组件(Popover、Listview等),交由上层的业务方来使用(THGroupView)。

3.就如他们在宣传时所说,他们实现了一套类似css的子集,用来解决样式问题,相当复杂和强大,靠这个才能将Native的核心组件组成JS层的基本组件再组成业务端的业务组件,应该是采用facebook/css-layout· GitHub的C语言版本实现的(在ppt中我们看到了类似flex-direction: column一类的代码,这个正是css-layout支持的语法)。

4.在React Native中,写JS的工程师解决的是「将基本组件拼装成可用的React组件」的问题,写Native Code的工程师解决的是「提供核心组件,提供足够的扩展性、灵活性和性能」的问题。

React Native的设计考虑:

ReactJS对React Native有着直接的影响(我没在生产环境中用过React,只看过代码&用过Angular,如果有误请指出)

ReactJS里面有这样的设计:

1. ReactJS的大工厂入口createElement返回的不是某个实体DOM对象,而只是一个数组

2.通过源码中 ui/browser/目录中的代码,将这个数组转换成DOM

3.底层的渲染核心是可以更换的

另外,Facebook自己有JSX,css-layout等开源项目,基于这些,如果要做一个用 JS来开发Native app的东西,很自然就想到了一套最有效率的搞法:

1.将 ui/browser里面的代码替换成一套 Native的桥接JS(实际上,iOS版是通过

injectGenericComponentClass方法,将核心组件的方法注入到JS里面),就直接复用React的MVVM,自动将数据映射到Native了

2.

Native

code里面实现三组核心API,一组提供核心组件的API(create、update、delete),一组事件方法(ReactJS里面的

EventEmitter),一组对css进行解析(css-layout)以及返回Style的ComputedStyle(React

Native里面叫meatureStyle)。

这样,用上了ReactJS本身的所有核心功能和设计思路,Native的开发也足够简单。

那,React Native是什么?

其实这东西从Native开发来说,相当于重新发明了一个浏览器渲染引擎并且套一个React的壳,从Web开发角度来说,就是把原来React的后端换成了Native code来实现,就跟Flipboard最近搞的React Canvas一样: Flipboard· GitHubreact-canvas

React Native的优势和劣势::

优势相对Hybird app或者Webapp:

1.不用Webview,彻底摆脱了Webview让人不爽的交互和性能问题

2.有较强的扩展性,这是因为Native端提供的是基本控件,JS可以自由组合使用

3.可以直接使用Native原生的「牛逼」动画(在FB Group这个app里面,面板滑出带一点果冻弹动,面板基于某个点展开这种动画随处可见,这种动画用Native code来做小菜一碟,但是用Web来做就难上加难)。

优势相对于Native app:

1.可以通过更新远端JS,直接更新app,不过这快成为各家大型Native app的标配了…

劣势:

1.扩展性仍然远远不如web,也远远不如直接写Native code(这个不用废话解释了吧)

2.

从Native到Web,要做很多概念转换,势必造成双方都要妥协。比如web要用一套CSS的**版,Native通过css-layout拿到最终样

式再转换成native原生的表达方式(比如iOS的Constraint\origin\Center等属性),再比如动画。另外,若Android和

iOS都要做相同的封装,概念转换就更复杂了。

更新1:添加了React对React Native的影响。

更新2:基本确定其使用了 css-layout,添加了对React Native的总结

更新3: React native已经开源了: React Native,只有iOS版。我写了几个demo,简单看了看objc代码并和开源前的我们的一些结论(见后文)交叉验证。简单地从前端工程师和系统整体角度说一下React native的特点和优劣吧。

更新4:补充了几条优势和与前端开发的对照

react native 相比其他的优势在哪儿

html5现在还占优势的。 1、开发方式(1)代码结构: React Native更为合理,组件化程度高(2)UI布局:Web布局灵活度> React Native> Native(3)UI截面图:React Native使用的是原生组件,(4)路由/Navigation:React Native& Native更胜一筹(5)第三方生态链:Native modules+ js modules= React Native modules 2、性能&体验(1)内存:Native最少;因为React Native含有框架,所以相对较高,但是后期平稳后会优于Native。(2)CPU:React Native居中。(3)动画:React Native动画需求基本满足。(4)安装包体积:React Native框架打包后,811KB。相比热更新,可以忽略和考虑资源规划。(5)Big ListView(6)真机体验:Native>= React Native> H5/Hybrid

版权说明:如非注明,本站文章均为皮努努下载原创,转载请注明出处和附带本文链接;

本文地址:https://www.pinunu.com/cars/react-nativereact-nativef.html