2017-01-23 30 views
4

对于React Native如何工作,我还是很困惑。也许是因为我在移动开发方面没有足够的背景(尽管我尝试过一两次原生Android)。什么是“本机”,什么不在React Native项目中?

如果我没有错,像Phonegap或Ionic这样的混合框架将在'WebView'中运行整个项目(或大部分),我错了吗?

尽管React Native等本机框架旨在使用本地资源,而不是纯粹的Web技术。

但是我们仍然在写JavaScript,而React Native很快完成这项工作,它可能仍然使用我们刚才写的Javascript(我的意思是,它不是解析,翻译为本地代码并重新编译)。

我想到的问题是,本地资源究竟是什么,什么不在React Native项目中?我们编写的Javascript在不在'webview'的情况下运行在哪里?有两个本地库为这两个平台创建Javascript到Objective-C和Java的接口?在Web解决方案中,它只是在WebView中注入整个代码?

附加问题:我们能否考虑React Native是一个混合框架,因为我们为许多不同的平台编写一个代码,或者它不是正确的术语?

回答

5

如果我没有错,喜欢的PhoneGap或离子混合框架将运行整个项目(或大部分)在“ WebView',我错了吗?

是的。 Phonegap和Ionic使用PhoneGap(实际上是Cordova)作为框架的一部分,使用HTML,CSS和JavaScript来呈现UI。除此之外,唯一的连接(据我所知)是Cordova提供给设备本地API的访问(例如,考虑传感器)。

尽管本机框架(如React Native)旨在使用本地资源,而不是纯粹的Web技术。

是的,RN的方法是让开发人员在保留原生开发(性能,感觉和外观等)的好处的同时使用JavaScript和React框架。

但我们还是编写JavaScript,并做出反应原住民如此之快,它很可能还是使用我们刚才写的JavaScript做这项工作(我的意思是,它不是解析,转换为本地代码并重新编译)。

下面是我认为您的误解所在:您必须将React Native视为仍依赖iOS/Android/Windows本机API的本机应用程序与JavaScript代码段之间的“桥梁”。该桥授予对这些API的JS访问权限,并关心呈现UI和其他不同的本地方面,以及提供相反方向(从Native到JS)的数据。 JS代码永远不会“转换”为Java或Swift/Obj-C。它的执行方式与编程相同。但是,您可能会要求RN使用JavaScript中的某个本地组件(例如,<Text>将在iOS中实例化一个UILabel))。然后,该库使用少量组件(如布局,视图,控件等)来实现此方法,但要领仍然如上所述。

我想到的问题是,原生资源究竟是什么,什么不在React Native项目中?

所以......基本上,任何用JavaScript编写的东西都不会是本机的,但通过它的执行,你可以获得本地组件。您直接使用本地API编程的任何东西(这是RN的优势之一,如果您觉得自己可以继续开发,或者某个本地组件未在库中实现),则可以将其视为“原生”。

如果不是'webview',我们写的Javascript运行在哪里?有两个本地库为这两个平台创建Javascript到Objective-C和Java的接口?

如前所述,React Native JS和Objective-C之间的接口。 JavaScript不会在任何时间呈现在WebView中。

在Web解决方案中,它只是在WebView中注入整个代码?

React Native不适用于网络...除非您使用this

额外的问题:我们可以考虑React Native是一个混合框架,因为我们为许多不同的平台编写一个代码,或者它不是正确的术语?

嗯......我想说一个混合框架是一个结合了不同开发资源(比如说Web技术和本地API)的工具。在这种情况下,React Native会属于该类别。我不会称之为混合,因为它可以在多个平台上工作(我简单地称之为多平台)。

+0

您是说UI组件将由每个平台的本地组件支持?例如,RN中的ListView会在Android中注入ListView布局? 更具体一些,当我在RN中的React代码中添加一个ListView并重新运行应用程序时,就Android而言,它会以编程方式实例化一个新的Android ListView并将其附加到Layout中? 这是这个想法吗? –

+0

是的,这正是它所做的。 – martinarroyo

+0

你在这里提到Windows,但据我所知,RN不支持Windows手机 – HendraWD

0

根据我的知识 本地资源是框架/操作系统(Android/iOS)纯粹给出的组件。 您必须具备各自的Android/iOS知识才能制作本机用户界面。

即将到来的ReactNative,它将使用您的JavaScript或HTML代码创建/生成Native组件。 我可以说,它把你代码的命令来生成所需的本地组件

相关问题