关于 React Native,你想知道的都在这里了

Dom tree Diff 是什么? 具体是怎么运算的呢? 尤其是提高效率上。

既然原生上面有一层虚拟DOM,那按道理应该可以做到根据一套JS在不同的环境下渲染不同的原生代码,实现1次编写处处运行。而且Native是需要编译的吧,那它应该做不到H5那种的实时更新。还有一点,这层虚拟DOM能做到一套View同时渲染Web和Native两套界面吗?

是这样的,因为iOS和Android有各自不同风格的控件,有的区别很大,所以React-Native提供了Platform可以判断当前系统是Android还是iOS,然后渲染什么样的UI,这些可以写在一套js代码里,热更新不需要编译,React-Native有一个bundle命令,打包出来的bundle文件是可以直接被加载的,不需要编译。 如果想一套View渲染Web和App的话,UI部分的代码是不一样的,这个可以看React的文档和React-Native的文档,render渲染的JSX部分代码不一样。

既然Web的view和Native的view无法公用,那在Web上弄一层shadow-dom有什么意义?仅仅为了实现diff算法吗?React确实我没深入了解过,写NG比较多,感觉写React很繁琐

虚拟DOM主要是解决Web的一个性能瓶颈问题,类似cordova之类的跨平台解决方案性能瓶颈就在DOM上,虚拟DOM就是当DOM有更改的时候在进行DOM渲染,可以有效地减少DOM渲染次数,解决这个性能问题。NG更适合单页的web app或者说H5在native部分。

问下两个问题 1).React Native当初宣传的时候说的是 一次学习,处处编写。为什么React Native不是那种传统的一次编写,处处运行。 2)Native和Web端的React有联系吗?

React-native是从React发展而来的,最大的优势就是既有Web的热更新优势,又有接近Native的性能,核心思想是虚拟DOM,所以针对不同的平台编写不同的JS,实际上底层调用的还是原生控件,所以是一次学习处处编写而不是一次编写处处运行。 Native和Web端的react是有联系的。

React Native 组件的属性和方法够多够灵活吗?

目前React-Native的第三方库还不是很丰富,需要oc的支持和暴露,当然这只是目前。组件的方法不是很多,但是很好的处理了一个UI组件的渲染生命周期,足以控制组件;组件可以自定义和扩展,所以属性是可以灵活使用。具体的可以关注3个比较重要的属性:props、state、ref

二、入门相关

这个需要什么基础?还有就是以后的发展您是怎么看的?会代替原生还是和原生相辅相成?

(1)基础:前端基础,例如:JS、JSX、Flexbox以及熟悉iOS的组件即可。

(2)前景:现在最大的优势就是热更新;对于需要及时更新的部分,可以采用React-Native

(3)目前:相辅相成;未来的话,我希望更多是大部分替代原生。

用React Native 开发APP需要掌握其他哪些技能,除了React Native部分

会一些JS是最好的,掌握一些ES6语法之类的。

三、适用场景相关——技术总是脱离不了使用场景的

RN目前在项目实践中已知的坑有哪些?假如新开发一个项目,完全使用RN是否可行?另外想了解一下您在项目中使用的程度和场景,谢谢! 

不太建议完全使用RN,因为Facebook也在不断填坑,每个月都有新版本,一个长期项目经不起频繁换依赖库的版本;我们公司也只是作为业余研究性质,不过RN的热更新思路真心不错,可以随时更换功能模块。需要注意的是,热更新和在线更新是不一样的,分别对应的是 hot-reloading 和 reload,调试时是通过 hot 选项控制;鉴于 hot-reloading 需要和服务器实时保持一个socket长连接和既有的不确定性,我不相信会有公司会采用 hot-reloading 的方案,应用于生产环境。如果真的应用hot-reloading了,那就分享下心得呗。

目前使用React-Native有那些局限,React-Native更适合开发那些应用?

React-Native还是有些坑需要踩的,现在Github上也能看到Recat-Native源码库都有不少开发者在提bug,更新的也很快。目前React-Native做一些内部APP还是可以的;目前对动画的支持不是很高,这个可以在一些APP中做一些优雅降级;更适合开发那些动画效果要求不是忒高、组件功能要求相对较少(如果团队中有OC的开发者可以忽略)的APP。很多坑,我们团队现在都在踩。

请问React-Native的目前推广和应用局限性有哪些?

React-Native技术的推广可以从公司内存APP试水;边踩坑边开发,React-Native的局限性除了平台因素,就是对开发者要求较高。当然开发效率来说,应该是很快的。如果团队中有Object-C成员,相对而言,上手就会轻松很多。

现在互联网公司开发一个新的移动APP,是不是建议使用React-Native

不一定,React-Native是可以减少一些开发成本,但是目前React-Native Android还有很多不完善的地方,目前比较适合做偏UI方面相对简单的一些需求和功能 。

四、React Native 与其他开发工具、方式对比

想知道,这个与 Phonegap 的比较,包括开发效率,学习曲线,用户体验,工具的完善程度等。

Phonegap 和 React-Native 还是不同。React-Native 内部在 iOS7 版本以上采用的是JS Core Engine 解析的,在版本上是降级使用 WebView。React-Native 针对前端开发者上手难度应该不是很大,主要熟悉Flexbox布局、JSX语法、React-Native API。

这个同跨平台开源的.NET + C#开发通吃平台的APP相比,差距在哪里呢?

你说的应该是指Xamarin吧,这个我有尝鲜过,收费的商业解决方案,我感觉是主要依赖官方提供的控件和库,React-Native相对学习成本没那么高,毕竟现在做C#的相对小众,React-Native没提供的原生控件你可以通过它提供的扩展来自行扩展,开源而且社区相当活跃,我认为前景很广阔,个人认为要比Xamarin好,性能方面没对比过,因为我没买Xamarin的方案。

能从学习周期、开发难度、运行速度方面分析下,AngularJS和React Native的差异吗?

对我个人来说,我是一个Android开发者,之前没接触过Web和JS,Angular我也有看过,Angular学习成本我认为比React高,做APP方面的就是ionic,React是个纯UI的东西,React-Native也是,然后提供了和原生APP的扩展模块,开发周期我感觉对于我来说肯定是React比较快,运行速度方面React-Native是要胜于ionic的。

React-Native开发出来的APP和原生的APP的性能有区别吗,React Native做出来的安卓APP是不是没有原生的流畅啊?

React-Native开发效率高于Native;React-Native效率和体验高于Hybird;React-Native整体性能跟Native差距不大。Facebook给出的性能测试是接近原生的性能,如果不是很复杂的APP,看不出什么差别,但是如果相对复杂的动画UI之类的,那肯定还是原生更胜一筹。不过如果只是开发一个功能性APP的话基本没啥大差别了,毕竟现在的Android手机性能也很好。

用这个你觉得在与我们这帮原生Android App工程师的竞争中,你们最大的技术优势是什么,对比原生,你们的劣势有在何处?

最大的技术优势:iOS和Android可以一定程度上的代码公用,减少开发成本和开发周期,可以随时线上热更新。 和原生相比的劣势:目前React-Native Android不适合做相对复杂的动画效果和UI,体验上会有一些问题,而且热更新只是针对纯React的模块,和原生交互的会有原生代码,热更新就不好用了。目前我感觉最好的方式还是原生+React的混合开发,根据需求做技术选型。

我们目前在用国内的APICloud来做移动端的开发!我感觉React-Native这个东西相应该没有APICloud方便吧!还有React-Native和Phonegap应该差不多的吧?

React-Native和Phonegap差很多,React-Native性能接近Native的性能是因为React核心是虚拟DOM,通过diff算法来进行有效的DOM更新,从而突破Web的DOM性能瓶颈。Phonegap,也就是现在的开源方案cordova,它做出来是Hybrid,RN做出来是Native,性能是最大差别,不过如果你的是资讯类应用,不计较性能,团队又多Web开发人员也不妨考虑cordova。还有你说的APICloud,实际上是给原生APP套了个WebView壳,尤其在Android上会有性能问题。

我感觉最好的方式还是原生开发,虽然需要的精力多了些但最终是值的,你说呢?

这个就看产品和需求怎么定了,技术选型往往都是跟着产品和需求跑,毕竟技术是服务用户的嘛,我觉得互惠互利吧。

另外Swift开源后,将来有可能第三方机构开发出Siwft可以同时构建iOS APP的平台,所以我感觉还是学好Java和Swift比较好一些,混合开发也许以后会好一点,但目前很长一段时间和原生开发还是要差不少吧。

你要说的是Swift同时构建Android APP吧?不排除这种可能,不过目前混合开发还是比较主流的,毕竟BAT和其他一线二线互联网公司都在用,Web和原生结合可以解决很多产品需求上的问题。

相比其他移动开发,它的优势是什么?

RN的优势在于性能与灵活性的平衡,比Hybrid好的性能,热更新有比Native好的灵活性。快速做出业务逻辑和UI 基本一致 、性能介于原生和混合的APP。


分享到:


相關文章: