javascript - 什么是 "native",什么不在 React Native 项目中?

标签 javascript android ios cordova react-native

我对 React Native 的工作原理仍然很困惑。可能是因为我没有像样的移动开发背景(不过我已经尝试过一两次原生 Android)。

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

而 React Native 等原生框架旨在使用原生资源而不是纯网络技术。

但我们仍在编写 Javascript,而 React Native 完成这项工作的速度如此之快,以至于它可能仍在使用我们刚刚编写的 Javascript(我的意思是,它不是解析、转换为 native 代码并重新编译)。

我想到的问题是,什么是原生资源,什么不是 React Native 项目?如果不在“webview”中,我们编写的 Javascript 在哪里运行?有没有为两个平台创建 Javascript 到 Objective-C 和 Java 的接口(interface)的本地库?在 Web 解决方案中,它只是将整个代码注入(inject)到 WebView 中?

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

最佳答案

If I'm not wrong, hybrid frameworks like Phonegap or Ionic will run the entire project (or most of it) in a 'WebView', am I wrong?

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

Whereas native frameworks such as React Native is meant to use native resources instead of purely web technology.

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

But we still write Javascript, and React Native does the job so quickly that it is probably still using the Javascript we just wrote (I mean, it's not parsing, translating to native code and recompiling).

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

The question that comes to my mind is, what exactly is a native resource and what is not in a React Native project?

所以...基本上,任何用 JavaScript 编写的东西都不是原生的,但通过执行它,您可以获得原生组件。您直接使用 native API 编程的任何内容(这是 RN 的优势之一,如果您愿意,或者库中未实现某个 native 组件,您仍然可以进行 native 开发)都可以被视为“ native ”。

Where is the Javascript we write running if not in a 'webview'? There are native libraries that creates the interface of Javascript to Objective-C and Java for both platforms?

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

In a web-solution it simply injects the entire code in the WebView?

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

Extra question : can we consider React Native an hybrid framework just because we write one code for many different platforms, or it is not the correct terminology?

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

关于javascript - 什么是 "native",什么不在 React Native 项目中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813824/

相关文章:

android - Cordova BlinkID 阿联酋身份证扫描不返回姓名或号码

java - OpenGL : performance in C++ (NDK) vs Java (Dalvik) 中的 Android 专用游戏

ios - Flutter IOS 应用程序一打开就崩溃

javascript - babel 编译时有没有注入(inject)或忽略全局变量的方法?

javascript - 如何在 JavaScript 的构造函数中定义对象的原型(prototype)?

javascript - 在客户端执行 jsx 转换

ios - 长按时某些单词的文本字段的文本颜色会发生变化

javascript - 在Extjs源码中定义var Ext

android - iOS App Store 和/或 Google Play 商店中的重复下载如何计算?

javascript - 无法在 iOS 模拟器上运行简单的基于 KineticJs 的 Cordova/PhoneGap 应用程序