如果我没错的话,类似Phonegap或Ionic这样的混合框架将在“WebView”中运行整个项目(或大部分),我错了吗?
是的。Phonegap和Ionic(使用PhoneGap实际上是Cordova作为框架的一部分)利用HTML、CSS和JavaScript来呈现UI。只有Cordova提供对设备本地API的访问(例如传感器)(据我所知)。
而原生框架如React Native则旨在使用本地资源而不是纯Web技术。
是的,RN的方法是使开发人员能够使用JavaScript和React框架同时保留本地开发的优势(性能、外观和感觉等)。
但我们仍然要编写JavaScript,而React Native完成工作的速度非常快,以至于它可能仍在使用我们刚刚编写的JavaScript(我的意思是,它没有解析、转换为本地代码并重新编译)。
这里我认为你的误解在于:你必须把React Native看作是一个“桥梁”,它连接着一个仍然依赖于iOS/Android/Windows本地API的本地应用和一段JavaScript代码。这个桥梁允许JS访问这些API,并关心渲染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并不适用于Web...除非您使用
this。
额外问题:我们是否可以认为React Native是混合框架,因为我们为许多不同的平台编写了一种代码,或者这不是正确的术语?
嗯...我会说混合框架是一种结合不同开发资源(比如Web技术和本地API)的工具。在这种情况下,React Native属于该类别。我不会仅仅因为它在多个平台上工作而称其为混合框架(我只会简单地称其为多平台)。